2011-04-05 67 views

回答

2
DELETE FROM <tableName> WHERE <col> < getdate()-1 
+0

那么我的问题主要是如何设置这样的事情总是确保数据库中没有超过24小时的记录,但是,这不会删除记录,其中一天之前,而不是考虑到小时等? – Scott 2011-04-05 16:22:10

+0

'getdate()'函数返回当前日期时间;从中减去一个会减去24小时,保持时间信息不变(例如'select cast('2011-04-05 12:24:39.943'as datetime) - 1 ='2011-04-04 12:24:39.943' ')。 – 2011-04-05 16:26:03

3

我几件事情要加入讨论......

  1. 为避免扫描主键,请确保在给定日期时间列上有索引(唯一或不依赖于数据)。
  2. 还要查看您正在尝试使用的语句的执行计划,并考虑将其包含在事务中并进行后续回滚,以便您可以重复该过程并评估差异。

例如: 比较

date_created < dateadd(d,-1,GETDATE()) 

date_created < getdate()-1 

可见,DATEADD功能增加了相当大的开销来评价,虽然它会更快然后扫描PK它总是更好完全投射最快的选择。

+0

只需将未来日期插入到deleteAfter或expirationDate列中,即可删除delete语句中的任何计算并将其移入插入。当然你的里程可能会有所不同,所以基准,基准,基准。 – Rawheiser 2011-04-05 20:06:46