将日期时间值设置为SQL Server中的变量的正确方法

时间:2012-08-28 16:09:31

标签: sql-server datetime

  

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

在SQL Server中为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,您的回答会有所不同吗?

3 个答案:

答案 0 :(得分:16)

根据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设置。

答案 1 :(得分:3)

这已经在例如best way to convert and validate a date string

  

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

如果您无法保证ISO格式,则应事先设置适用的DATEFORMAT

修改

Re:你还会将它用于datetime2

吗?

是的,实际上这在MSDN中明确说明here.由于100ns的额外精度,ISO 8601格式为YYYY-MM-DDTHH:mm:ss[.nnnnnnn]

答案 2 :(得分:-2)

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

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

SET @myDate = '2013-12-01'

根据ISO 8601

,这些是正确的格式