SerializeJSON из Coldfusion не ладит с MS SQL 2008 - PullRequest
0 голосов
/ 28 февраля 2012

Я нахожусь на Adobe Coldfusion 9.0.1 и Microsoft SQL Server 2008 R2 и подтверждаю следующее на 2008 Express. У меня есть две таблицы, к которым я присоединяюсь и сериализирую результат в переменную JavaScript, используя собственную функцию Coldfusion SerializeJson.

CREATE TABLE [dbo].[event](
[id] [int] IDENTITY(1,1) NOT NULL,
[date1] [date] NULL,
[date2] [datetime] NULL,
[date3] [datetime2](7) NULL,
[status] [nchar](10) NULL
);

CREATE TABLE [dbo].[status](
[id] [int] IDENTITY(1,1) NOT NULL,
[text] [nvarchar](max) NULL,
);

Мой первый CFQuery выглядит как

<cfquery name="qryprod" datasource="mssqlexpress">
    SELECT  e.id, date1, date2, date3
    FROM    event e
    inner join  status s
    on  e.status = s.id
    WHERE   e.id = <cfqueryparam cfsqltype="cf_sql_numeric" value="2">
</cfquery>
#SerializeJson( qryprod, true )#

Все три даты сериализуются в нечто вроде: Februar, 27 2012 22:10:12 - Имена месяцев на немецком языке.

Мой второй запрос:

<cfquery name="qryprod" datasource="mssqlexpress">
    WITH subStatus AS (
        SELECt  id, text
        FROM    status
    )
    SELECT  e.id, date1, date2, date3
    FROM    event e
    inner join  subStatus s
    on      e.status = s.id
    WHERE   e.id = <cfqueryparam cfsqltype="cf_sql_numeric" value="2">
</cfquery>
#SerializeJson( qryprod, true )#
  • date1 типа date сериализуется в 2012-02-27
  • date2 типа datetime сериализуется в Februar, 27 2012 22:10:12
  • date3 типа datetime2 выглядит как 2012-02-27 22:10:12.4400000

Как это происходит и что мне нужно сделать, чтобы мои даты всегда были в форме Monthname, day year?

Лучший, Бернхард

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012

Посмотрите на функцию T-SQL CONVERT.

SELECT  e.id, CONVERT(varchar(15), date1, 107) AS date1...

Приведенный выше код формата вернет mon dd, yyyy формат.

Если вам нужно полное название месяца, вы можете использовать функции даты:

SELECT  e.id, 
(
DATENAME(month, date1) + ' ' + 
CAST(DATEPART(d, date1) AS varchar(2)) + ', ' + 
CAST(DATEPART(yyyy, date1) AS varchar(4))
) AS date1
...
0 голосов
/ 28 февраля 2012

Вам, вероятно, потребуется циклически просмотреть результат запроса и вручную изменить значения даты на строки.Вы можете использовать ParseDateTime и DateFormat (или их локализованные версии, LSParseDateTime и LSDateFormat) для выполненияэто.

...