Sql server 2008 1个sql server的日期时间转换错误,但不是另一个
我有两台服务器运行SQL Server 2008,我有以下查询:Sql server 2008 1个sql server的日期时间转换错误,但不是另一个,sql-server-2008,datetime,date-format,date-conversion,Sql Server 2008,Datetime,Date Format,Date Conversion,我有两台服务器运行SQL Server 2008,我有以下查询: SELECT cast('13/1/2011' as datetime) 如果我在服务器A上执行此查询我会得到以下结果: 2011-01-13 00:00:00.000 但是,如果我在服务器B上执行此操作,则会得到以下结果: 2011-01-13 00:00:00.000 结果将varchar数据类型转换为datetime数据类型 在超出范围的值中 我认为这是英国/美国的日期格式问题,因为我在12/1/2011中没有收到错误
SELECT cast('13/1/2011' as datetime)
如果我在服务器A上执行此查询我会得到以下结果:
2011-01-13 00:00:00.000
但是,如果我在服务器B上执行此操作,则会得到以下结果:
2011-01-13 00:00:00.000
结果将varchar数据类型转换为datetime数据类型
在超出范围的值中
我认为这是英国/美国的日期格式问题,因为我在12/1/2011
中没有收到错误,但它确实返回2011-12-01 00:00:00.000
如何获取服务器B以获得与服务器A相同的结果?需要更改什么设置以及更改位置?控制如何解释这些不明确的日期格式的是
登录
的语言设置(尽管可以用显式SET DATEFORMAT
语句覆盖)
DEFAULT\u LANGUAGE
可以通过更改,甚至更好,不要依赖SET DATEFORMAT
或DEFAULT\u LANGUAGE
设置来确保日期转换按预期进行。在SQL Server中,无论使用何种语言设置或日期是什么样的,都应该始终使用中性格式或显式格式说明符作为最佳实践。在两台服务器上都尝试以下操作,您将不会遇到任何问题
- 日期中性格式:
Convert(日期时间,'20110113')
- 日期中性格式:
Convert(日期时间,'2011-01-13T00:00:00')
- 显式格式说明符:
-有关详细信息,请参阅Convert(datetime,'13/1/2011',103)
English
更改为British English
,但仍然出现相同的错误。@Curt-在进行更改后尝试打开一个新连接。使用ALTER Login
是否与转到SSMS>Security>Login>Properties相同,并更改那里的语言?如果是这样的话,我已经尝试过了,但没有成功。@Curt-你打开了一个新的连接吗SELECT cast('13/1/2011'作为日期时间)
对我来说也适用,从English
到British English
。但不影响以前使用该登录打开的连接。