13

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

在 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 是 type DATETIME2,您的答案会有所不同吗?

4

3 回答 3

15

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

于 2012-08-28T16:19:10.563 回答
3

这在之前已经介绍过,例如转换和验证日期字符串的最佳方法

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

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

编辑

Re: 你还会用这个吗datetime2

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

于 2012-08-28T16:17:55.443 回答
-2

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

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

SET @myDate = '2013-12-01'

这些是符合ISO 8601的正确格式

于 2012-08-28T16:13:16.460 回答