sql delete语句,其中日期大于30天

时间:2010-12-06 09:30:05

标签: sql-server date-arithmetic

我希望找到一条SQL语句,在执行时会删除超过30天的字段。

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

我现在不在家,所以我无法测试。这个好吗 ?

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

8 个答案:

答案 0 :(得分:89)

在WHERE子句中使用DATEADD

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

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

答案 1 :(得分:8)

虽然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)

答案 2 :(得分:2)

您也可以使用

  

SELECT * from Results WHERE date&lt;现在() - 间隔30天;

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

要删除日期时间值超过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())

要从日期时间值超过12小时的日期时间值中删除表中的记录:

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

要从日期时间值超过15分钟的日期时间值中删除表中的记录:

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

来自:http://zarez.net/?p=542

答案 5 :(得分: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秒,后者可保留并耗时不到一秒钟。

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

  

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

但是这样做:

DELETE FROM table_name WHERE date_column < CURRENT_DATE - 30;