3

我有 2 台运行 SQL Server 2008 的服务器,我有以下查询:

SELECT cast('13/1/2011' as datetime)

如果我在服务器 A上执行此查询,我会得到结果:

2011-01-13 00:00:00.000

但是,如果我在服务器 B上执行此操作,我会得到结果:

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

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

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

4

2 回答 2

6

控制如何解释这些模棱两可的日期格式的是 的语言设置login(尽管这可以用显式SET DATEFORMAT语句覆盖)。

DEFAULT_LANGUAGE可以通过以下方式更改ALTER LOGIN

于 2011-11-08T16:39:08.883 回答
1

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

  • 日期中性格式:Convert(datetime, '20110113')
  • 日期中性格式:Convert(datetime, '2011-01-13T00:00:00')
  • 显式格式说明符:Convert(datetime, '13/1/2011', 103)- 有关详细信息,请参阅SQL Server 联机丛书:转换和转换
于 2013-03-28T16:18:39.630 回答