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

Kas*_*ash 13 sql-server datetime

可能重复:
转换和验证日期字符串的最佳方法

在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'
Run Code Online (Sandbox Code Playgroud)

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

Kas*_*ash 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'
Run Code Online (Sandbox Code Playgroud)

使用ISO 8601格式的优势在于它是一种国际标准.此外,使用此格式指定的日期时间值是明确的.此外,此格式不受SET DATEFORMAT或SET LANGUAGE设置的影响.


ale*_*oze -2

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'” - 你的最后一个分配在欧洲语言设置下**不安全** - 它将失败.... (7认同)