mat*_*atk 10 sql sql-server datetime iso date
我需要一些帮助来理解SQL Server中的日期格式处理.
如果您尝试以下操作,它将返回正确的结果:
SET LANGUAGE English
SELECT CAST('2013-08-15' AS DATETIME)
-- 2013-08-15 00:00:00.000
但是,这会导致转换错误,因为显然SQL Server将'8'解释为日,将'15'解释为月份:
SET LANGUAGE German
SELECT CAST('2013-08-15' AS DATETIME)
-- Conversion failed when converting date and/or time from character string.
我知道我可以使用与语言无关(略微适应的ISO-8601)格式YYYYMMDD(没有破折号),它可以在任何语言中使用.
但是YYYY-MM-DD,当SQL Books清楚地说,我不明白为什么语言依赖
"解释取决于字符串文字格式,...和默认语言选项设置的组合....某些字符串文字格式不受这些设置的影响.... ISO 8601格式不依赖于这些设置,是国际标准."
http://technet.microsoft.com/en-us/library/ms180878%28v=sql.105%29.aspx
即使查看返回的dateformat select * from sys.syslanguages也没有任何指示 - 日期格式dmy,因此它也与ISO-8601格式不匹配.
所以,问题是:
更新:
进一步阅读http://technet.microsoft.com/en-us/library/ms180878%28v=sql.105%29.aspx#ISO8601Format,它说'要使用ISO 8601格式,您必须指定每个元素格式.这包括T,冒号(:),+或 - ,以及句点(.)'(例如2004-05-23T14:25:10).
上面的表格(http://technet.microsoft.com/en-us/library/ms180878%28v=sql.105%29.aspx#StringLiteralDateandTimeFormats)表示ISO 8601数字不依赖于DATEFORMAT,但它也是不是多语言.我不知道在哪里可以找到有关多语言部分的其他信息 - 例如,每种语言使用的确切格式.