Sql server 由于区域设置,将字符串转换为日期时间时出错
在SQLServer2008R2 Express的一个特定实例中,我在使用语言环境方面遇到了很多困难 我在英国,以下几点失败了:Sql server 由于区域设置,将字符串转换为日期时间时出错,sql-server,datetime,date,Sql Server,Datetime,Date,在SQLServer2008R2 Express的一个特定实例中,我在使用语言环境方面遇到了很多困难 我在英国,以下几点失败了: SELECT CAST('2012-12-31' AS DATETIME) 错误消息: 将varchar数据类型转换为datetime数据类型导致值超出范围 Windows服务器区域设置为英式英语。我的登录地点是英式英语。排序规则“如果这很重要”是拉丁文1_General_CI_AS 数据库“语言”是英语(美国),但这与另一台服务器上的另一个实例相同,并且上面的SQ
SELECT CAST('2012-12-31' AS DATETIME)
错误消息:
将varchar数据类型转换为datetime数据类型导致值超出范围
Windows服务器区域设置为英式英语。我的登录地点是英式英语。排序规则“如果这很重要”是拉丁文1_General_CI_AS
数据库“语言”是英语(美国),但这与另一台服务器上的另一个实例相同,并且上面的SQL不会失败
有什么想法吗?您应该在转换上明确定义日期格式,在本例中为120:
SELECT CONVERT(DATETIME,'2012-12-31',120)
您可以查看此页面以查看更多日期格式:
对于建立数据库连接的用户(SQL用户),请将语言设置为英语 这是一个特定于发出查询的连接的SQL用户的设置
SET LANGUAGE English
SELECT CAST('2012-12-31' AS DATETIME)
检查这是否是问题的一种方法。。。在ManagementStudio中运行此命令,并以发出查询的SQL用户身份登录
SET LANGUAGE English
SELECT CAST('2012-12-31' AS DATETIME)
如果可行,请适当设置SQL用户的默认语言不要对日期文本使用
YYYY-MM-DD
,请始终使用YYYYMMDD
。无论区域设置、日期格式设置、语言设置、区域设置等如何,此操作都不会失败:
SELECT CAST('20121231' AS DATETIME);
也许值得一读:
'20121208'
作为明确的标准传递时,他们的意思是8月12日而不是12月8日,将存储错误的日期。如果他们通过了“20121612”,那么他们将收到一个错误。顺便说一句,当用户将'2012-12-08'
传递给Lamak的方法时,会发生完全相同的事情。不同之处在于,SQL Server总是以这种方式解释YYYYMMDD,而YYYY-MM-DD有时会以错误的方式解释。我明白了,谢谢您提供的信息。我问这个问题是因为在我工作的地方,区域设置是yyyddmm,因为我们对我们的客户强制执行它,但是本地设置默认为ddmmyyy,并且经常导致日期混淆。