从SQL Server的表中删除两个月前的所有数据

0 人关注

我想创建一个SQL Server作业,它将每月执行并删除所有旧记录,除了最后两个月的数据。我的最终动机是,当作业执行时,我的数据库中只保留最后两个月的数据,而不考虑月份是28天、30天还是31天。

例如,如果作业在3月1日执行,我想在当前数据库中保留从1月1日到3月1日的所有记录,其余的记录都要删除。

目前我正在使用以下SQL查询来选择要删除的数据。

SELECT *  
  FROM tbl
  where [Datetime] <= DATEADD(MONTH, -2,convert(datetime,'03/02/2016')  )

注意:日期格式是 "MM/dd/yyyy",但它也会选择1月1日的数据。在每个月的1号执行工作是不固定的。如果我把日期定为 "03/01/2016",那么输出就很好。

那么我将使用以下的where子句

where [Datetime] <= DATEADD(MONTH, -2,Getdate())

所以考虑日期可以是3月的任何日期(或任何月份的日期)。

有什么想法吗?

sql-server-2008
Pwavel002
Pwavel002
发布于 2016-07-20
1 个回答
agm92
agm92
发布于 2016-07-20
0 人赞同

这应该有效。

DECLARE @requiredDate datetime
SELECT @requiredDate = CONVERT(DATETIME,DATEADD(MM, DATEDIFF(MM, 0, GETDATE())-2, 0))