我无法从文献资料中看出Server为什么以指定样式以外的格式解析文本。
无论我是否以预期格式提供文本:
SELECT CONVERT(DATETIME, N'20150601', 112)或不正确的格式(用于样式113):
SELECT CONVERT(DATETIME, N'20150601', 113)结果是一样的:2015-06-01 00:00:00.000,我希望后者不能转换日期(正确)。
在尝试将VARCHAR转换为DATETIME时,它采用了哪些规则?也就是说,为什么后者(不正确的格式风格)仍然正确地解析日期?
编辑:似乎我还不够清楚。样式113应该期望dd mon yyyy hh:mi:ss:mmm(24h),但出于某种原因,它很高兴地以yyyymmdd格式转换值。
发布于 2015-04-28 13:01:57
因为日期是标准格式的(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)并证明这是一个兼容特性:
select convert(datetime2,'20150425',99999999)虽然仍然可以隐式转换datetime2对象,但样式必须在转换图的范围内。
发布于 2015-04-28 13:03:42
将日期N'20150601'转换为有效日期时间的原因是,在Server中,文字N'20150601'是日期时间的通用符号。这意味着,如果您以N'yyyymmdd格式声明日期时间值,则Server知道它是通用的日期时间格式,并知道如何读取它。
发布于 2015-04-28 12:37:22
为了应用这些格式,您应该转换为varchar类型:
SELECT CONVERT(varchar(100), CAST('20150601' as date), 113)好的,您正在将datetime转换为datetime。你还想要什么?为了应用格式,您应该转换为varchar,并且必须将日期或时间类型作为第二个参数。
https://stackoverflow.com/questions/29919670
复制相似问题