我在sql server中有一个字段类型varchar。它包含像“010109”等数据。Sql Server DATETIME格式不正确
当我试图将其转换为DATETIME时,它的实际值应该是“2009年1月1日”时返回一个值“2001年1月9日”。
有没有人有解决这个问题?
感谢您的帮助。
我在sql server中有一个字段类型varchar。它包含像“010109”等数据。Sql Server DATETIME格式不正确
当我试图将其转换为DATETIME时,它的实际值应该是“2009年1月1日”时返回一个值“2001年1月9日”。
有没有人有解决这个问题?
感谢您的帮助。
我想会有一些转换格式,所以你可以把:
select(convert(datetime,'010109',<some magic number>))
并得到结果,但我似乎无法找到一个给出正确的日期:(
这作品,但很讨厌:
declare @dt varchar(6)
select @dt = '010109'
select convert(datetime,RIGHT(@dt,2) + SUBSTRING(@dt,3,2) + LEFT(@dt,2))
Yeesh
同样的解决方案,我想出了。令人讨厌的确实,有趣的是看看有没有更喜欢的那里:) – 2009-07-03 12:18:13
当您键入在T日他“XXXXXX”的格式似乎SQLServer的assumess它是一个ISO格式YYMMDD,因此它不会受到SET DATEFORMAT
我意识到了2种格式的 - 所谓的安全格式
但似乎年月月日日也通过了ISO - 检查BOL日期和时间样式 - 格式12
这可以解释为什么张贴天蝎座的解决方案没有奏效
您可以使用与格式规范(12)butterchicken提供的解决方案是在安全方面:
declare @dt varchar(6)
select @dt = '010109'
select convert(datetime,RIGHT(@dt,2) + SUBSTRING(@dt,3,2) + LEFT(@dt,2),12)
如果可能的话我将是理想的,如果你能列更改为datetime,以避免类似的意外,未来
SQL Server中的期待日期为格式YMD
所以,如果你的字符串是这样的“090101”你会得到正确的日期。
select(convert(datetime,'090101',104))
所以,你将不得不substrtring的部分和运行转换。
“Sql Server日期时间格式*不正确*” 哦,讽刺... – voyager 2009-07-03 14:23:03