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

时间:2011-11-08 16:38:05

标签: 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 上执行此操作,我会得到结果:

  

导致将varchar数据类型转换为日期时间数据类型   在超出范围的价值。

我认为这是英国/美国的日期格式问题,因为12/1/2011我没有收到错误,但确实返回2011-12-01 00:00:00.000

如何让服务器B 获得与服务器A 相同的结果?需要更改什么设置以及在哪里?

2 个答案:

答案 0 :(得分:6)

login的语言设置控制着如何解释这些不明确的日期格式(尽管可以使用明确的SET DATEFORMAT语句覆盖它。)

可以通过ALTER LOGIN

更改DEFAULT_LANGUAGE

答案 1 :(得分:1)

更好的是,不要依赖SET DATEFORMATDEFAULT_LANGUAGE设置来确保您的日期转换按预期工作。在SQL Server中,无论使用何种语言设置或日期如何,都应始终 - 作为最佳实践 - 使用中性格式或使用显式格式说明符。在两台服务器上尝试以下操作,您就没有问题。

  • 日期中立格式:Convert(datetime, '20110113')
  • 日期中立格式:Convert(datetime, '2011-01-13T00:00:00')
  • 显式格式说明符:Convert(datetime, '13/1/2011', 103) - 有关详细信息,请参阅SQL Server Books Online: Cast and Convert