由于服务器上的日期格式,我的脚本失败了。
declare @lastDay as datetime
declare @endDay as datetime
set @lastDay = '2012-07-12 18:00:00.000'
set @endDay = '2012-07-16 18:00:00.000'
Select getdate(), @lastDay, @endDay
在上面的代码中,我指定的数据是(yyyy-mm-dd hh:mi:ss.mmm)格式。但是sqlserver将其视为(yyyy-dd-mm hh:mi:ss.mmm)。
但是当使用getdate()函数时,sql返回(yyyy-mm-dd hh:mi:ss.mmm)格式。仅当我分配值时才会出现此问题。
相同的代码在PC上正常工作但在服务器上失败。
我在服务器上获得上述代码的结果是
2012-07-17 15:34:30.627 2012-12-07 18:00:00.000 NULL
并显示错误消息
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
我知道我可以使用转换功能,但是现在需要在服务器上安排的dts作业几百个,这对我来说不是一个快速的解决方案。
我想我需要更改服务器上的一些设置(yyyy-mm-dd hh:mi:ss.mmm)。如果有人知道解决方法,请帮助我。
答案 0 :(得分:2)
当语言为法语时,YYYY-MM-DD不起作用。
你可以说:
SET @lastDay = CONVERT(DATETIME, '2012-07-12 18:00', 120);
但使用更安全的格式更安全,并且无需转换:
SET @lastDay = '20120712 18:00:00.000';
或者,如果您真的想要破折号,请添加T分隔符,以防止覆盖区域设置:
SET @lastDay = '2012-07-12T18:00:00.000';
修复格式的好处是让我们说你通过改变服务器的区域设置来“修复”这个问题。 “修复”只有在其他人更改设置之后才会起作用,因为它会破坏其他内容,或者直到您将代码移动到另一台服务器。传递安全格式会绕过所有这些问题。
答案 1 :(得分:-1)
我在用户个人资料中找到了解决方案。我将用户的默认语言从“英式英语”改为“英语”,一切都很正常。
还要感谢您的快速回复。我从你的回复中获得了一些额外的知识。
感谢。