由于区域设置将字符串转换为datetime时出错

时间:2012-05-30 14:54:03

标签: sql-server datetime date

我在SQL Server 2008 R2 Express的特定实例中使用语言环境遇到了很多困难。

我在英国,以下失败:

SELECT CAST('2012-12-31' AS DATETIME)

错误讯息:

  

将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

Windows服务器区域设置是英式英语。我的登录区域是英式英语。排序“如果重要”是Latin1_General_CI_AS。

数据库'language'是英语(美国),但是这与另一台服务器上的另一个实例相同,而且上面的SQL没有失败。

有什么想法吗?

3 个答案:

答案 0 :(得分:9)

对于建立数据库连接的用户 - SQL用户 - 将语言设置为英语。

这是特定于发出查询的连接的SQL用户的设置

检查这是否有问题的一种方法...在Management Studio中运行并以发出查询的SQL用户身份登录

SET LANGUAGE English
SELECT CAST('2012-12-31' AS DATETIME)

如果可行,请相应地设置SQL用户的默认语言

答案 1 :(得分:8)

不要将YYYY-MM-DD用于日期文字,请始终使用YYYYMMDD。无论语言环境,日期格式设置,语言设置,区域设置等如何,这都不会失败:

SELECT CAST('20121231' AS DATETIME);

值得一读:

答案 2 :(得分:3)

您应该在转换时明确定义日期格式,在本例中为120:

SELECT CONVERT(DATETIME,'2012-12-31',120)

您可以查看此页面以查看更多日期格式: http://msdn.microsoft.com/en-us/library/ms187928.aspx