我有两台运行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 相同的结果?需要更改什么设置以及在哪里?
答案 0 :(得分:6)
答案 1 :(得分:1)
更好的是,不要依赖SET DATEFORMAT
或DEFAULT_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。