我希望找到一条SQL语句,在执行时会删除超过30天的字段。
我的表“events”有一个字段“date”,其中包含在数据库中插入的日期和时间。
我现在不在家,所以我无法测试。这个好吗 ?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
答案 0 :(得分:89)
答案 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<现在() - 间隔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())
答案 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;