删除超过一天的项目 - SQL Server

时间:2009-10-19 13:39:53

标签: sql sql-server datetime

在我的数据库中的表中,我有一个datatime列,用于存储添加记录的时间。如何在运行存储过程时删除所有超过一天的记录(考虑当前时间)?

7 个答案:

答案 0 :(得分:31)

您可以使用datediffgetdate函数构建DELETE语句。

用法示例:

DELETE FROM yourTable WHERE DATEDIFF(day,getdate(),thatColumn) < -1

答案 1 :(得分:29)

说到SQL,你必须用“比一天更早”来指定你的意思。

  • DATEDIFF:它使用午夜边界,所以在10月19日00:05运行,你将删除6分钟的行(10月18日23:59)

  • 24小时?

  • 昨天午夜? 10月19日运行代码,在18日之前删除行?

另外,不要在列上放置函数。

这假设24小时到达:

DELETE
    MyTableWhere
WHERE
    MyColumn < DATEADD(day, -1, GETDATE())

这假设昨天午夜:

DELETE
    MyTableWhere
WHERE
    MyColumn < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -1)

答案 2 :(得分:5)

Delete <TableName>
Where DATEDIFF(day, <ColumnName>, getdate()) > 0

拉​​吉

答案 3 :(得分:0)

我通常建议不要实际删除数据库中的数据,因为您不知道何时可能需要返回并恢复或回滚到先前的记录,因为数据损坏或审计等。相反,我会添加一些列标题的东西比如“IsDeleted”并使用更新语句将日期条目设置为true。

这样的东西
'UPDATE tablename SET IsDeleted = 1 WHERE (DATEDIFF(day,DateCreatedOn,GETDATE()) > 0)

DateCreatedOn是您创建记录或时间戳日期的地方

答案 4 :(得分:0)

假设日期列为“RecordCreatedDate”

DELETE FROM yourtable WHERE RecordCreatedDate&lt; DATEADD(d,-1,GETDATE())

我只是提醒说,如果您的数据库有数百万行,那么您应该在RecordCreatedDate列上有一个索引,如果要删除大量数据,可能会进行较小的批量删除。

答案 5 :(得分:0)

从YourTable中删除DateColumn&lt; GETDATE() - 1

答案 6 :(得分:-1)

  

ts&gt; = now() - INTERVAL 1 DAY

其中ts是日期时间列的名称