2010-09-23 69 views
1

我有一个表,不幸的是一些日期被存储为字符串。SQL Server 2008 VarChar To DateTime

我有许多由他们将它们转换成日期时间和过滤的报告。这是直到今天工作正常时,突然我得到这个错误

“varchar数据类型为datetime数据类型的转换导致超出范围的值。”

的日期都存储在“YYYY-MM-DD”的格式,并都是有效的。

如果我运行下面的SQL语句

SELECT CAST('2010-06-02' AS DateTime) 

我希望得到“2010-06-02”,然而今天我发现了“2010-02-06”的东西已经与改变方式SQL格式日期。我看了一下服务器上的区域设置,看起来都是正确的。

还有什么可能会导致这?

回答

0

得到这个转换的一个明确的方法是做以下:

SELECT CAST(replace('2010-06-02', '-', '') AS DateTime) 

而且将永远被解释为YYYYMMDD,忽视了set dateformat ydm声明或数据库具有任何文化背景。

3

尝试设置格式明确

select convert(datetime, '2010-06-02',101) 
+0

@Gavin - 可能是数据库中的语言已更改。 http://msdn.microsoft.com/en-us/library/ms191448.aspx – codingbadger 2010-09-23 10:37:17

+0

@Gavin - 在SQL Server上的日期和时间一些进一步的信息http://msdn.microsoft.com/en-us/library/ms180878 .aspx – codingbadger 2010-09-23 10:37:57

+0

@Gavin Draper这种印象很接近现实。这是没有连字符的日期字符串,被解释为忽略了您可能拥有的任何文化设置。 – 2010-09-23 10:47:13

0

Q1:还有什么可能会导致这?

的地方,你可能是local101(美国)之下,从103(英国/法国)

像巴里伤心使用将数据convert