【问题标题】:Reason for difference in the date format with the same SQL Command?同一个 SQL 命令的日期格式不同的原因是什么?
【发布时间】:2015-01-23 15:06:44
【问题描述】:

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

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 日”。

【问题讨论】:

  • DATEDIFF 和 DATEADD 不是 ANSI SQL。您使用的是哪个 dbms?
  • @jarlh 这看起来像SQL Server
  • 嗯....是的。这就是106 格式的作用,在后面的查询中,您使用的是101105 格式
  • MSDN 有一个关于 CONVERT() 函数及其可以返回的不同日期格式的优秀页面。

标签: sql sql-server datetime time


【解决方案1】:

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

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

【讨论】:

  • 成功了!! :) SELECT CONVERT(varchar(11), convert(varchar(11),DATEADD(ms, DATEDIFF(ms, '00:00:00', IST), crea_date), 106) + right(convert(varchar(32) ,DATEADD(ms, DATEDIFF(ms, '00:00:00', IST), crea_date),100),8), 106) FROM Completed_Scrubs CS LEFT JOIN TimeZonesTable TZT ON CS.States=TZT.State_US_CA WHERE accounting_week_num=201549
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多