分配给sql server 2000中的变量时出现日期格式问题

时间:2012-07-17 15:01:44

标签: sql-server-2000

由于服务器上的日期格式,我的脚本失败了。

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)。如果有人知道解决方法,请帮助我。

2 个答案:

答案 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)

我在用户个人资料中找到了解决方案。我将用户的默认语言从“英式英语”改为“英语”,一切都很正常。

还要感谢您的快速回复。我从你的回复中获得了一些额外的知识。

感谢。