web-dev-qa-db-fra.com

instruction de suppression SQL où la date est supérieure à 30 jours

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())
44
Alex

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.

96
Colin Mackay

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)
8
James Wiseman

Vous pouvez aussi utiliser

SELECT * parmi les résultats WHERE date <NOW () - INTERVAL 30 JOUR;

2
Vikas Chauhan

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.

1
rjose

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())

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

1
Ray Koren

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
1
Chagbert

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())
0
Bill Grubbs