Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL Server 2008 VarChar到日期时间_Sql Server 2008_Datetime - Fatal编程技术网

Sql server 2008 SQL Server 2008 VarChar到日期时间

Sql server 2008 SQL Server 2008 VarChar到日期时间,sql-server-2008,datetime,Sql Server 2008,Datetime,我有一个表,不幸的是,许多日期被存储为字符串 我有许多报告将它们转换为datetimes并按它们过滤。直到今天,我突然发现这个错误,这一切都很正常 “将varchar数据类型转换为datetime数据类型导致值超出范围。” 日期均以“yyyy-mm-dd”格式存储,且均有效 如果我运行以下SQL语句 SELECT CAST('2010-06-02' AS DateTime) 我希望得到“2010-06-02”,但从今天开始,我得到的是“2010-02-06”,SQL格式化日期的方式有所改变。

我有一个表,不幸的是,许多日期被存储为字符串

我有许多报告将它们转换为datetimes并按它们过滤。直到今天,我突然发现这个错误,这一切都很正常

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

日期均以“yyyy-mm-dd”格式存储,且均有效

如果我运行以下SQL语句

SELECT CAST('2010-06-02' AS DateTime) 
我希望得到“2010-06-02”,但从今天开始,我得到的是“2010-02-06”,SQL格式化日期的方式有所改变。我在服务器上查看了区域设置,看起来都是正确的


还有什么可能导致这种情况?

请尝试明确设置格式

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

问题1:还有什么可能导致这种情况

在本地,您可能在local101(美国)下,并输入103(英国/法国)的数据


像barry sad一样,使用

获得这种转换的明确方法是执行以下操作:

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

这将始终被解释为YYYYMMDD,忽略
set dateformat ydm
声明或数据库具有的任何文化设置。

@Gavin-可能是数据库中的语言已更改@Gavin-在SQL Server@Gavin Draper中提供了一些关于日期和时间的进一步信息,这种印象与真实情况非常接近。不带连字符的日期字符串将被解释为忽略您可能具有的任何区域性设置。