2009-07-03 46 views
1

我在sql server中有一个字段类型varchar。它包含像“010109”等数据。Sql Server DATETIME格式不正确

当我试图将其转换为DATETIME时,它的实际值应该是“2009年1月1日”时返回一个值“2001年1月9日”。

有没有人有解决这个问题?

感谢您的帮助。

+1

“Sql Server日期时间格式*不正确*” 哦,讽刺... – voyager 2009-07-03 14:23:03

回答

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

+0

同样的解决方案,我想出了。令人讨厌的确实,有趣的是看看有没有更喜欢的那里:) – 2009-07-03 12:18:13

1

当您键入在T日他“XXXXXX”的格式似乎SQLServer的assumess它是一个ISO格式YYMMDD,因此它不会受到SET DATEFORMAT

我意识到了2种格式的 - 所谓的安全格式

  • ISO:年月日
  • ISO8601:YYYY-MM-DDTHH:MI:ss.mmm

但似乎年月月日日也通过了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,以避免类似的意外,未来

-1

SQL Server中的期待日期为格式YMD

所以,如果你的字符串是这样的“090101”你会得到正确的日期。

select(convert(datetime,'090101',104)) 

所以,你将不得不substrtring的部分和运行转换。