Je souhaite trouver une instruction SQL qui, une fois exécutée, supprime les champs de plus de 30 jours.
Ma table "événements" a un champ "date" qui contient la date et l'heure à laquelle il a été inséré dans la base de données.
Je ne suis pas chez moi pour le moment, donc je ne peux pas tester cela. est-ce que c'est bon ?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
Utilisez DATEADD dans votre clause WHERE:
...
WHERE date < DATEADD(day, -30, GETDATE())
Vous pouvez également utiliser l'abréviation d
ou dd
à la place de day
.
Bien que DATEADD
soit probablement le moyen le plus transparent de le faire, il est à noter que simplement getdate()-30
suffira également.
Aussi, recherchez-vous dans 30 jours, c’est-à-dire heures, minutes, secondes, etc.? Ou 30 jours à compter de minuit aujourd'hui (par exemple, 12/06/2010 00: 00: 00.000). Dans ce cas, vous pourriez envisager:
SELECT *
FROM Results
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112)
Vous pouvez aussi utiliser
SELECT * parmi les résultats WHERE date <NOW () - INTERVAL 30 JOUR;
Nous pouvons utiliser ceci:
DELETE FROM table_name WHERE date_column <
CAST(CONVERT(char(8), (DATEADD(day,-30,GETDATE())), 112) AS datetime)
Mais une meilleure option consiste à utiliser:
DELETE FROM table_name WHERE DATEDIFF(dd, date_column, GETDATE()) > 30
Le premier n’est pas sargable (c’est-à-dire que les fonctions se trouvent à droite de l’expression et ne peuvent donc pas utiliser index) et prend 30 secondes, le second est sargable et prend moins d’une seconde.
Pour supprimer des enregistrements d'une table dont la valeur date/heure est supérieure à 30 jours dans Date_column, procédez comme suit:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < GETDATE() - 30
...ou ca:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(dd,-30,GETDATE())
Pour supprimer des enregistrements d'une table dont la valeur date/heure est supérieure à 12 heures dans Date_column:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(hh,-12,GETDATE())
Pour supprimer des enregistrements d'une table dont la valeur date/heure est supérieure à 15 minutes dans Date_column:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(mi,-15,GETDATE())
Vous pouvez également définir entre deux dates:
Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO
Au lieu de convertir en varchar pour obtenir uniquement le jour (convert (varchar (8), [Date], 112)), je préfère conserver un champ de date/heure et de ne lui donner que la date (sans l'heure ).
SELECT * FROM Results
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())