使用相同SQL命令的日期格式不同的原因?

时间:2015-01-23 15:06:45

标签: sql sql-server datetime time

当我尝试运行下面提到的查询时:

SELECT CONVERT(varchar(11), GETDATE(),106)

我得到了结果:

23 Jan 2015

然而,查询:

SELECT 
    CONVERT(VARCHAR(10), DATEADD(ms, DATEDIFF(ms, '00:00:00', IST), crea_date), 101)
FROM 
    Completed_Scrubs CS 
LEFT JOIN 
    TimeZonesTable TZT ON CS.States = TZT.State_US_CA 
WHERE 
    fiscal_week_num = 201549

和查询

SELECT 
    CONVERT(VARCHAR(11), CONVERT(VARCHAR(10), DATEADD(ms, DATEDIFF(ms, '00:00:00', IST), crea_date), 101), 105)
FROM 
    Completed_Scrubs CS 
LEFT JOIN 
    TimeZonesTable TZT ON CS.States = TZT.State_US_CA 
WHERE 
    fiscal_week_num = 201549

返回相同的结果:

(No column name)
12/31/2014
12/30/2014
12/19/2014
01/03/2015
01/06/2015
01/08/2015
01/01/2015
01/03/2015
01/07/2015
01/08/2015

为什么呢?有没有办法将上述查询中的日期格式化为'2015年1月23日'。

1 个答案:

答案 0 :(得分:1)

CONVERT()函数接受格式代码(在各种查询中有101,105和106),告诉SQL Server如何排列DATETIME字段的各个部分(完整的代码列表和相关格式,请查看here)。

您的查询会返回不同的结果,因为您通过使用不同的格式代码告诉他们。请查看链接的文档,并选择适合您要求的格式代码 - 在这种情况下,在您的第一个查询中采用106格式。