从SQL Server

时间:2016-07-20 13:12:33

标签: sql-server-2008

我想创建一个每月执行的SQL Server作业,并删除除最近两个月数据之外的所有旧记录。我的最终动机是,在工作执行时,我的数据库中只保留最近2个月的数据,无论月份是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月的任何日期(或任何月份的日期)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这应该有效:

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

SELECT *  
  FROM tbl
  where [Datetime] < @requiredDate