两年之间的SQL日期减法

时间:2011-01-24 14:23:27

标签: sql-server date subtraction

我正在尝试从MS Access转换的查询出现问题。查询标记记录,以便在超过90天时删除,但是当我将此查询转换为sql server时,会删除太多记录。

UPDATE  DT.SM_T_CountTotals
       SET  IsActive = 0
WHERE Convert(varchar, DT.SM_T_CountTotals.PostDate, 101) <
        Convert(varchar, GetDate()- 90, 101) 

当我在MS Access中运行此查询时,我总共获得了3793条被标记的记录,但在SQL服务器中,我获得了69061条被标记为要删除的记录。 GetDate() - 90值在2010年10月26日是正确的,但它正在标记今年要删除的所有内容。

我确信这是我容易忽视的事情。请帮忙吗?

我明白了:

UPDATE  DT.SM_T_CountTotals
   SET  IsActive = 0
WHERE DT.SM_T_CountTotals.PostDate < Convert(varchar, GetDate()- 90, 101) 

2 个答案:

答案 0 :(得分:3)

您正在比较VARCHAR值,而不是DATE。

101转换为MM / DD / YY,因此您要比较月,日,然后年。

你应该使用112(yymmdd)

答案 1 :(得分:1)

两个日期之间的计算可以在原生数据类型中轻松完成,而不是将其转换为字符串。可以(并且你有)从这种转换中得到错误的答案。

在where子句中使用DateDiff来获取超过90天的记录。

http://msdn.microsoft.com/en-us/library/ms189794.aspx

UPDATE  DT.SM_T_CountTotals
SET  IsActive = 0
WHERE ABS (DATEDIFF (dd, Getdate(), DT.SM_T_CountTotals.PostDate)) > 90