Coldfusion的SerializeJSON与MS SQL 2008不相容

时间:2012-02-27 21:30:50

标签: json sql-server-2008 coldfusion coldfusion-9

我使用Adobe Coldfusion 9.0.1和Microsoft SQL Server 2008 R2并在2008 Express上确认以下内容。我有两个表,我使用Coldfusion自己的SerializeJson函数将结果序列化为JavaScript变量。

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 )#
  • 类型date的date1序列化为2012-02-27
  • 类型datetime的日期2被序列化为Februar, 27 2012 22:10:12
  • 类型datetime2的日期3看起来像2012-02-27 22:10:12.4400000

这是怎么发生的?我必须做些什么来始终以Monthname, day year的形式获取我的日期?

最佳, 哈德

2 个答案:

答案 0 :(得分:0)

您可能需要遍历查询结果,并手动将日期值更改为字符串。您可以使用ParseDateTimeDateFormat(或其本地化版本LSParseDateTimeLSDateFormat)来完成此操作。

答案 1 :(得分:0)

看一下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
...