【问题标题】:Delete all data before two months from table in SQL Server从 SQL Server 中的表中删除两个月前的所有数据
【发布时间】:2018-09-05 23:50:48
【问题描述】:

我想创建一个 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())

因此请考虑日期可以是三月的任何日期(或任何月份的日期)。

有什么想法吗?

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:

    这应该可行:

    DECLARE @requiredDate datetime
    SELECT @requiredDate = CONVERT(DATETIME,DATEADD(MM, DATEDIFF(MM, 0, GETDATE())-2, 0)) 
    
    SELECT *  
      FROM tbl
      where [Datetime] < @requiredDate
    

    【讨论】:

    • OP 还希望它运行当月的第一天,5/1/2016 在您的代码的情况下,因此您需要添加一天,这样SELECT 就不会删除任何具有例如5/1/2016 03:31:56 的 [DateTime]。除非您将 23:59:59 添加到 @requiredDate,否则使用 &lt;= 将不起作用。 SELECT @requiredDate = DATEADD(day,1,CONVERT(DATETIME,DATEADD(MM, DATEDIFF(MM, 0, GETDATE())-2, 0)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    相关资源
    最近更新 更多