Sql server 一台计算机上SQL中的日期转换错误,但代码在另一台计算机上工作?

Sql server 一台计算机上SQL中的日期转换错误,但代码在另一台计算机上工作?,sql-server,tsql,datetime,Sql Server,Tsql,Datetime,我有这段代码 Select * FROM [DB].[dbo].[STG_TABLE] WHERE convert(datetime, cast([CHANGE_DATE] as char(8))) > DATEADD(DAY, -3, GETDATE()) 变更日期的类型为数字(8,0) 我以前使用过这个代码。它仍然可以在本地计算机上使用相同的数据,但当我在开发服务器上运行此程序时,会出现一个错误: 从字符串转换日期和/或时间时,转换失败 两台计算机在控制面板中具有相同的系统日期设置

我有这段代码

Select * FROM [DB].[dbo].[STG_TABLE]
WHERE convert(datetime, cast([CHANGE_DATE] as char(8))) > DATEADD(DAY, -3, GETDATE())
变更日期的类型为数字(8,0)

我以前使用过这个代码。它仍然可以在本地计算机上使用相同的数据,但当我在开发服务器上运行此程序时,会出现一个错误:

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

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

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

Select * FROM [DB].[dbo].[STG_TABLE]
WHERE cast([CHANGE_DATE] as char(8)) > DATEADD(DAY, -3, GETDATE())
它给出了同样的错误,这让我相信它是在大于之后,但我仍然不知道为什么。

尝试另一个转换

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)->数值,然后与表字段进行比较

也尝试检查表中的日期

SELECT [CHANGE_DATE]
from [DB].[dbo].[STG_TABLE]
where isdate(cast([CHANGE_DATE] as char(8)))=0

-你不应该将日期存储为字符串或数值——那样只会自找麻烦。使用
DATE
DATETIME
数据类型!这些数字看起来像什么?您仍然会得到错误,因为
datetime
的优先级高于
varchar
,因此如果不指定显式转换,您会得到隐式转换。我理解,但这是源代码中的类型,我无法对此进行更改。目前,结果看起来像'20130115'YYYYMMDDLeaving,正如marc_所说,这是一个非常糟糕的设计,如果所有的数字都是YYYYMMDD,那么代码应该可以工作。这让我怀疑,两台机器上的数据实际上不同,而第二台机器上的数据超出了范围,例如,20130230I的答案几乎相同(除了我包括了额外的跃点,一直到
数值(8,0)
),该字段中有一个“0”,而不是第二个答案,你可以编辑你的第一个。