【发布时间】:2010-12-08 00:08:10
【问题描述】:
在我的数据集的一个表中,我有一个数据时间列,它存储添加记录的时间。如何在运行存储过程时删除所有早于一天的记录(考虑当前时间)?
【问题讨论】:
标签: sql sql-server datetime
在我的数据集的一个表中,我有一个数据时间列,它存储添加记录的时间。如何在运行存储过程时删除所有早于一天的记录(考虑当前时间)?
【问题讨论】:
标签: sql sql-server datetime
对于 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)
【讨论】:
Delete <TableName>
Where DATEDIFF(day, <ColumnName>, getdate()) > 0
拉吉
【讨论】:
我通常建议不要从数据库中实际删除数据,因为您永远不知道何时可能需要返回并恢复或回滚到以前的记录,因为数据损坏或审计等。相反,我会添加一个位列标题像 "IsDeleted" 并使用更新语句将旧条目设置为 true。
类似
'UPDATE tablename SET IsDeleted = 1 WHERE (DATEDIFF(day,DateCreatedOn,GETDATE()) > 0)
DateCreatedOn 是您的记录创建日期或时间戳日期所在的位置
【讨论】:
假设日期列是“RecordCreatedDate”
从你的表中删除记录创建日期
我只提醒您,如果您的数据库有数百万行,那么您应该在 RecordCreatedDate 列上有一个索引,并且如果您要删除大量数据,则可能进行较小的批量删除。
【讨论】:
从 YourTable 中删除 DateColumn
【讨论】:
或
ts >= now() - 间隔 1 天
其中 ts 是日期时间列的名称
【讨论】: