Sql server 2008 1个sql server的日期时间转换错误,但不是另一个

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中没有收到错误

我有两台服务器运行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
中没有收到错误,但它确实返回
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)
    -有关详细信息,请参阅

在哪里更改?我刚刚尝试将我的SQL Server登录设置从
English
更改为
British English
,但仍然出现相同的错误。@Curt-在进行更改后尝试打开一个新连接。使用
ALTER Login
是否与转到SSMS>Security>Login>Properties相同,并更改那里的语言?如果是这样的话,我已经尝试过了,但没有成功。@Curt-你打开了一个新的连接吗
SELECT cast('13/1/2011'作为日期时间)
对我来说也适用,从
English
British English
。但不影响以前使用该登录打开的连接。