使用 SQLServer 查询删除日期大于30天的行

我需要一个 SQL 语句来删除超过30天的行。

我的表 events有一个字段 date,其中包含插入数据库的日期和时间。

这能行吗?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())

256466 次浏览

在 WHERE 子句中使用 死了:

...
WHERE date < DATEADD(day, -30, GETDATE())

也可以使用缩写 ddd代替 day

Although the DATEADD is probably the most transparrent way of doing this, it is worth noting 简单的 getdate()-30也足够了。

此外,你是否在寻找从现在开始的30天,也就是包括小时、分钟、秒等?或由今日午夜起计30天内(例如12/06/201000.00.00.000)。在这种情况下,你可以考虑:

SELECT *
FROM Results
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112)

你也可以在两个日期之间设置:

Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO

与其将其转换为 varchar 以获取单独的日期(Convert (varchar (8) ,[ Date ] ,112)) ,我更喜欢将其保留为 datetime 字段,并将其仅设置为日期(没有时间)。

SELECT * FROM Results
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())

You could also use

SELECT * from Results WHERE date < NOW() - INTERVAL 30 DAY;

To delete records from a table that have a datetime value in Date_column older than 30 days use this query:

USE Database_name;
DELETE FROM Table_name
WHERE Date_column < GETDATE() - 30

或者这样:

USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(dd,-30,GETDATE())

从 Date _ column 中日期时间值大于12小时的表中删除记录:

USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(hh,-12,GETDATE())

从 Date _ column 中日期时间值大于15分钟的表中删除记录:

USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(mi,-15,GETDATE())

发信人: http://zarez.net/?p=542

我们可以用这个:

    DELETE FROM table_name WHERE date_column <
CAST(CONVERT(char(8), (DATEADD(day,-30,GETDATE())), 112) AS datetime)

但一个更好的选择是:

DELETE FROM table_name WHERE DATEDIFF(dd, date_column, GETDATE()) > 30

前者不是 sargable (即表达式右边的函数,因此不能使用 index) ,需要30秒; 后者是 sargable,不到1秒。

使用 mySQL8时,GETDATE()不起作用

错误1305(42000) : 函数 mydatabase. GETDATE 不存在

但这个可以:

DELETE FROM table_name WHERE date_column < CURRENT_DATE - 30;

Delete row older than 30 days.

SELECT * FROM TABLE_NAME where timestampString <= now() - interval 30 DAY;