在我的数据库中的表中,我有一个datatime列,用于存储添加记录的时间。如何在运行存储过程时删除所有超过一天的记录(考虑当前时间)?
答案 0 :(得分:31)
您可以使用datediff和getdate函数构建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是日期时间列的名称