0

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

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

4

2 回答 2

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';

修复格式的好处是,假设您通过更改服务器的区域设置来“修复”它。该“修复”仅在其他人更改设置之前有效,因为它破坏了其他内容,或者直到您将代码移动到另一台服务器。以安全格式传递可以绕过所有这些问题。

于 2012-07-17T15:04:27.153 回答
-1

我得到了解决方案,它在用户配置文件中。我将用户的默认语言从“英式英语”更改为“英语”,一切正常。

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

谢谢。

于 2012-07-17T15:35:48.350 回答