我想创建一个每月执行的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月的任何日期(或任何月份的日期)。
有什么想法吗?
答案 0 :(得分:1)
这应该有效:
DECLARE @requiredDate datetime
SELECT @requiredDate = CONVERT(DATETIME,DATEADD(MM, DATEDIFF(MM, 0, GETDATE())-2, 0))
SELECT *
FROM tbl
where [Datetime] < @requiredDate