1

我在尝试从 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 Server 中,我得到 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) 
4

2 回答 2

3

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

101 转换为 MM/DD/YY,因此您要比较月份、日期和年份。

您应该使用 112 (yymmdd)

于 2011-01-24T14:33:36.367 回答
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
于 2011-01-24T14:35:37.210 回答