Ber*_*ann 9 sql t-sql sql-server
我无法从文档中看出为什么SQL Server以非指定样式的格式解析文本.
无论我是否以预期的格式提供文本:
SELECT CONVERT(DATETIME, N'20150601', 112)
Run Code Online (Sandbox Code Playgroud)
或格式不正确(格式113
):
SELECT CONVERT(DATETIME, N'20150601', 113)
Run Code Online (Sandbox Code Playgroud)
结果是一样的:2015-06-01 00:00:00.000
我希望后者无法正确转换日期.
它采用什么规则,试图将转换时VARCHAR
到DATETIME
?即为什么后者(格式样式不正确)仍能正确解析日期?
编辑:我似乎还不够清楚.风格113
应该是期望的,dd mon yyyy hh:mi:ss:mmm(24h)
但yyyymmdd
由于某种原因它很乐意转换格式的值.
因为日期是规范格式,即(20150101).数据库引擎隐式地落后于它.这是兼容性功能.
如果您将这些格式换成英国或美国日期格式,您将收到转换错误,因为它们无法隐式转换.
编辑:您实际上可以告诉它将其转换为猪,它仍然会隐式地将其转换为日期时间:
select convert(datetime,'20150425',99999999)
select convert(datetime,'20150425',100)
select convert(datetime,'20150425',113)
select convert(datetime,'20150425',010)
select convert(datetime,'20150425',8008135)
select convert(datetime,'20150425',000)
Run Code Online (Sandbox Code Playgroud)
并证明这是兼容性功能:
select convert(datetime2,'20150425',99999999)
Run Code Online (Sandbox Code Playgroud)
虽然您仍然可以隐式转换datetime2对象,但样式必须在转换图表的范围内.