SQL Server删除超过10分钟的所有行。

4
如何在SQL Server中删除所有创建时间晚于10分钟的行?谢谢。

让我猜猜:你的表中没有“CREATED”列? - Trinimon
4个回答

8
假设您有一个存储时间戳的列名为 Date_column。您可以尝试像这样操作,其中 mi 是分钟的缩写:
DELETE FROM Table_name
WHERE Date_column < DATEADD(mi,-10,GETDATE())

我只是好奇:这个列 time_created 是从哪里来的? - Trinimon
@Trinimon:我假设OP必须有一个列来存储时间戳。 - Rahul Tripathi
@Rahul:非常乐观的假设 - 如果他已经有一个,他真的会问这个问题吗? ;) 使用ORACLE,他可以使用闪回表 - 大致上是成功的... - Trinimon
2
实际上是的,我有这个列,这可能是我第一次也是最后一次需要接触SQL :),所以我在问。 - StringBuilder
@StringBuilder,Rahul:好的,我明白了 - 那真是一个非常基础的问题 :) 请不要介意 ;) - Trinimon
显示剩余2条评论

1
在您的表中添加一行,用于保存创建日期 modified
创建一个触发器,更新这一行。
CREATE TRIGGER dbo.trigger_table_update

    ON dbo.MyTable AFTER UPDATE
    AS BEGIN
        UPDATE dbo.MyTable  SET modified = GETDATE()
             FROM INSERTED i
                  WHERE dbo.MyTable.ID = i.ID
    END

现在你可以删除


DELETE FROM MyTable
WHERE modified  < DATEADD(mm,-10,GETDATE())

请查看如何在SQL Server中自动跟踪行的创建/更新时间?

1

SQL Server无法确定行创建的时间。您需要在表中添加一个额外的列来记录时间。如果这样做,您的删除语句将变得非常简单。


1
我使用这种语法是因为我觉得它很容易使用:
这需要一个时间戳列 - 这应该是任何生产系统的标准操作程序。
WHERE DATEDIFF(MINUTE, order.credat, CURRENT_TIMESTAMP) < 10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接