6

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

我在英国,以下失败:

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

错误信息:

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

Windows 服务器语言环境是英式英语。我的登录语言环境是英式英语。排序规则“如果这很重要”是 Latin1_General_CI_AS。

数据库“语言”是英语(美国),但这与不同服务器上的另一个实例相同,并且上述 SQL 不会失败。

有什么想法吗?

4

3 回答 3

9

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

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

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

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

如果可行,请适当设置 SQL 用户的默认语言

于 2012-05-30T15:00:10.647 回答
7

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

SELECT CAST('20121231' AS DATETIME);

也许值得一读:

于 2012-05-30T15:00:30.850 回答
4

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

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

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

于 2012-05-30T14:57:52.520 回答