【问题标题】:Correct way of setting datetime value to a variable in SQL Server [duplicate]在 SQL Server 中将日期时间值设置为变量的正确方法 [重复]
【发布时间】:2012-08-28 16:09:31
【问题描述】:

可能重复:
best way to convert and validate a date string

在 SQL Server 中为 datetime 变量分配 datetime 值时,出于文化不可知的原因,哪种格式最适合采用?为什么?

下面预定的日期是 2013 年 12 月 1 日

DECLARE @myDate DATETIME
SET @myDate = '2013-12-01'
SET @myDate = '20131201'
SET @myDate = '12/01/2013'
SET @myDate = '2013-12-01T00:00:00.000'
SET @myDate = '2013-12-01T00:00:00'

如果@myDate 的类型是DATETIME2,你的答案会不会不同?

【问题讨论】:

    标签: sql-server datetime


    【解决方案1】:

    基于ISO 8601标准,问题中以下3种格式是有效的:

    DECLARE @myDate DATETIME
    SET @myDate = '20131201'
    SET @myDate = '2013-12-01T00:00:00.000'
    SET @myDate = '2013-12-01T00:00:00'
    

    使用 ISO 8601 格式的优点是它是 国际标准。此外,由指定的日期时间值 使用这种格式是明确的。此外,此格式不受影响 通过 SET DATEFORMAT 或 SET LANGUAGE 设置。

    【讨论】:

    • (SELECT r.date_format FROM master.sys.dm_exec_requests r WHERE r.session_id = @@SPID)返回时不起作用dmy
    【解决方案2】:

    这在之前已经介绍过,例如best way to convert and validate a date string

    ISO-8601 格式为 YYYYMMDD 仅用于日期,或 YYYY-MM-DDTHH:mm:ss 用于 日期与时间

    如果你不能保证ISO格式,那么你应该预先设置适用的DATEFORMAT

    编辑

    Re : 你还会用这个datetime2

    是的,事实上这在 MSDN here. 中已经明确说明了,因为对 100ns 的附加精度,ISO 8601 格式为 YYYY-MM-DDTHH:mm:ss[.nnnnnnn]

    【讨论】:

      【解决方案3】:

      SET @myDate = '2013-12-01T00:00:00.000'

      SET @myDate = '2013-12-01T00:00:00'

      SET @myDate = '2013-12-01'

      根据ISO 8601,这些是正确的格式

      【讨论】:

      • 实际上 - 如果您的变量是 DATETIME 并且您只想设置日期 - 真正正确的格式是 SET @myDate = '20131201' - 您的最后一个分配是 不安全欧洲语言设置 - 它会失败....
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 2023-03-02
      • 2014-09-05
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      相关资源
      最近更新 更多