Sql Server DATETIME格式不正确

时间:2009-07-03 11:53:45

标签: sql-server-2008

我在sql server中有一个字段类型varchar。它包含“010109”等数据。

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

有人对此有解决方法吗?

感谢您的帮助。

3 个答案:

答案 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的影响

我知道有两种这样的格式 - 所谓的安全格式

  • ISO:yyyymmdd
  • ISO8601:YYYY-MM-DDTHH:MI:ss.mmm

但似乎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))

所以你必须对部件进行子串出并运行转换。