使用 SQL Server 查询删除日期早于 30 天的行

发布于 2024-10-05 21:18:36 字数 188 浏览 6 评论 0原文

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

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

这行得通吗?
从结果中选择 * WHERE [日期] >= DATEADD(d, -30, getdate())

I need a SQL statement to delete row that are older than 30 days.

My table events has a field date that contains the date and the time it was inserted in the database.

Will this work?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

我爱人 2024-10-12 21:18:36

在 WHERE 子句中使用 DATEADD

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

您还可以使用缩写 ddd 而不是 day

Use DATEADD in your WHERE clause:

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

You can also use abbreviation d or dd instead of day.

唯憾梦倾城 2024-10-12 21:18:36

你也可以使用

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

You could also use

SELECT * from Results WHERE date < NOW() - INTERVAL 30 DAY;
花落人断肠 2024-10-12 21:18:36

尽管 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)

Although the DATEADD is probably the most transparrent way of doing this, it is worth noting
that simply getdate()-30 will also suffice.

Also, are you looking for 30 days from now, i.e. including hours, minutes, seconds, etc? Or 30 days from midnight today (e.g. 12/06/2010 00:00:00.000). In which case, you might consider:

SELECT * 
FROM Results 
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112)
人事已非 2024-10-12 21:18:36

要从表中删除 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章

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

...or this:

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

To delete records from a table that have a datetime value in Date_column older than 12 hours:

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

To delete records from a table that have a datetime value in Date_column older than 15 minutes:

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

From: http://zarez.net/?p=542

流年里的时光 2024-10-12 21:18:36

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

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

但存在:

DELETE FROM table_name WHERE date_column < CURRENT_DATE - 30;

GETDATE() didn't work for me using mySQL 8

ERROR 1305 (42000): FUNCTION mydatabase.GETDATE does not exist

but this does:

DELETE FROM table_name WHERE date_column < CURRENT_DATE - 30;
杀手六號 2024-10-12 21:18:36

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

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

You could also set between two dates:

Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO
九厘米的零° 2024-10-12 21:18:36

我们可以使用这个:

    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 秒,后者是可控制的并且需要不到 10 秒的时间。第二。

We can use this:

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

But a better option is to use:

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

The former is not sargable (i.e. functions on the right side of the expression so it can’t use index) and takes 30 seconds, the latter is sargable and takes less than a second.

所谓喜欢 2024-10-12 21:18:36

我更喜欢将其保留为日期时间字段并使其仅是日期(没有时间),而不是转换为 varchar 以仅获取日期(convert(varchar(8), [Date], 112)) )。

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

Instead of converting to varchar to get just the day (convert(varchar(8), [Date], 112)), I prefer keeping it a datetime field and making it only the date (without the time).

SELECT * FROM Results 
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())
誰認得朕 2024-10-12 21:18:36

删除超过 30 天的行。

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

Delete row older than 30 days.

SELECT * FROM TABLE_NAME where timestampString <= now() - interval 30 DAY;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文