我在sql server中有一个字段类型varchar。它包含“010109”等数据。
当我尝试将其转换为DATETIME时,当实际值应为“2009年1月1日”时,它会返回“2001年1月9日”的值。
有人对此有解决方法吗?
感谢您的帮助。
答案 0 :(得分:2)
我认为会有一些转换格式,所以你可以把:
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
答案 1 :(得分:1)
当您以“xxxxxx”的格式键入日期时,似乎SQLServer认为它是ISO格式的yymmdd,因此它不受SET DATEFORMAT的影响
我知道有两种这样的格式 - 所谓的安全格式
但似乎yymmdd也是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)
如果可能的话,如果您可以将列更改为日期时间以避免将来出现类似的意外,那么我将是理想的
答案 2 :(得分:-1)
SQL Server期望日期格式为YMD
因此,如果你的字符串就像这个'090101'那么你会得到正确的日期。
select(convert(datetime,'090101',104))
所以你必须对部件进行子串出并运行转换。