3

我有这段代码

Select * FROM [DB].[dbo].[STG_TABLE]
WHERE convert(datetime, cast([CHANGE_DATE] as char(8))) > DATEADD(DAY, -3, GETDATE())

CHANGE_DATE 是 numeric(8,0) 类型。

我以前用过这段代码。它仍然可以在我的本地机器上处理相同的数据,但是当我在开发服务器上运行它时,它会给出一个错误:

从字符串转换日期和/或时间时转换失败。

两台计算机在控制面板中具有相同的系统日期设置。

如果我删除转换,如下所示:

Select * FROM [DB].[dbo].[STG_TABLE]
WHERE cast([CHANGE_DATE] as char(8)) > DATEADD(DAY, -3, GETDATE())

它给出了同样的错误,这让我相信它是在大于之后,但我仍然不知道为什么。

4

2 回答 2

5

尝试另一个转换。

Select * FROM [DB].[dbo].[STG_TABLE]
WHERE [CHANGE_DATE] >  cast(convert(char(8),DATEADD(DAY, -3, GETDATE()),112) as numeric(8,0))

GetDate() -> CHAR(8) -> NUMERIC 然后与表字段进行比较

于 2013-07-18T06:45:32.583 回答
1

还可以尝试检查表格中的日期

SELECT [CHANGE_DATE]
from [DB].[dbo].[STG_TABLE]
where isdate(cast([CHANGE_DATE] as char(8)))=0
于 2013-07-18T06:53:43.383 回答