我在SQL Server 2008 R2 Express的特定实例中使用语言环境遇到了很多困难。
我在英国,以下失败:
SELECT CAST('2012-12-31' AS DATETIME)
错误讯息:
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
Windows服务器区域设置是英式英语。我的登录区域是英式英语。排序“如果重要”是Latin1_General_CI_AS。
数据库'language'是英语(美国),但是这与另一台服务器上的另一个实例相同,而且上面的SQL没有失败。
有什么想法吗?
答案 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