75

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

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

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

4

9 回答 9

138

在 WHERE 子句中使用DATEADD :

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

您也可以使用缩写ddd代替day.

于 2010-12-06T09:32:58.583 回答
12

你也可以使用

SELECT * from Results WHERE date < NOW() - INTERVAL 30 DAY;
于 2017-09-21T08:20:46.303 回答
9

虽然这DATEADD可能是最透明的方式,但值得注意的是,这getdate()-30也足够了。

另外,您是否正在寻找从现在开始的 30 天,即包括小时、分钟、秒等?或从今天午夜起 30 天(例如 12/06/2010 00:00:00.000)。在这种情况下,您可以考虑:

SELECT * 
FROM Results 
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112)
于 2010-12-06T09:44:45.940 回答
4

要从表中删除 Date_column 中日期时间值超过 30 天的记录,请使用以下查询:

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

于 2018-02-07T17:06:39.270 回答
1

您还可以在两个日期之间设置:

Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO
于 2012-09-11T06:35:00.203 回答
1

我们可以使用这个:

    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

前者是不可搜索的(即在表达式右侧的函数,因此它不能使用索引)并且需要 30 秒,后者是可搜索的并且花费不到一秒。

于 2018-09-19T12:07:20.280 回答
0

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

SELECT * FROM Results 
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())
于 2017-02-17T14:41:41.457 回答
0

GETDATE()使用 mySQL 8 对我不起作用

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

但这确实:

DELETE FROM table_name WHERE date_column < CURRENT_DATE - 30;
于 2019-12-09T03:23:28.820 回答
0

删除超过 30 天的行。

SELECT * FROM TABLE_NAME where timestampString <= now() - interval 30 DAY;
于 2022-02-14T11:23:10.933 回答