sql delete statement where date is greater than 30 days
-
09-10-2019 - |
Question
I wish to find a SQL statement that when executed deletes fields that are older then 30 days.
My table "events" has a field "date" that contains the date and the time it was inserted in the database .
I am not at home right now so I can't test this. is this good ?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
Solution
Use DATEADD in your WHERE clause:
...
WHERE date < DATEADD(day, -30, GETDATE())
You can also use abbreviation d
or dd
instead of day
.
OTHER TIPS
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)
You could also use
SELECT * from Results WHERE date < NOW() - INTERVAL 30 DAY;
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
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
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.
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())