2011-09-29 7 views
2

J'ai une base de données "DB" et je veux supprimer les enregistrements de la table "MyRecords" qui sont de l'avenir ("RecordDates" qui sont plus qu'aujourd'hui juste pour éviter le changement de date sur le système) x non de jours à partir d'aujourd'hui.Supprimer les enregistrements basés sur les dates

Ce "x" peut varier. De plus, je veux exécuter le même type de commande avec mois et année aussi. J'utilise SQL Server et C#.

Répondre

4

Pour supprimer des documents qui à l'avenir et à moins de n jours dans l'avenir, vous pouvez utiliser T-SQL, comme ceci:

DELETE FROM DB.table WHERE 
    (date > GETDATE() AND date < DATEADD(day, 5, GETDATE())); 

Dans ce cas n est 5.

Vous pouvez voir tous les arguments à DATEADD() à DATEADD (Transact-SQL)

+0

comment le faire comme, moins de 30 jours dans le passé? écrit -30 devrait fonctionner? cela ne fonctionne pas pour moi – Sandy

+0

juste essayer de mettre la date passée avant 'AND' et essayer .... –

+0

SUPPRIMER À partir de la table O WH TABDate> DATEADD (jour, -30, GETDATE()) et TABDate

-1

Vous pouvez utiliser la requête DELETE FROM DB.table WHERE date > now() ou WHERE date > unix_timestamp(), en fonction de la façon dont vous stockez vos dates. (c'est-à-dire date-heure contre horodatage).

1

Cette requête va supprimer tous les enregistrements qui sont postérieurs à la date d'aujourd'hui, mais moins de 30 jours dans le futur. Vous pouvez remplacer "30" par une variable afin que vous puissiez déterminer combien de jours dans le futur à supprimer.

DELETE FROM Table 
WHERE 
TABDate > GETDATE() and TABDate < DATEADD(day, 30, GETDATE()) 

MISE À JOUR

Pour supprimer tous les enregistrements moins de 30 jours dans le passé, vous changeriez la requête pour ressembler à ceci:

DELETE FROM Table 
WHERE 
TABDate > DATEADD(day, -30, GETDATE()) AND TABDate < GETDATE() 

Notez également que tous ces exemples sont en appelant GETDATE() qui a aussi un composant de temps ainsi qu'une date, donc il faut prendre soin que chaque fois que vous voyez une déclaration comme < GETDATE() vous ne supprimez pas simplement des enregistrements avec une date avant, par exemple, 2011-0 9-29, vous supprimez tous les enregistrements dont la date est antérieure à '2011-09-29 17:30'. Donc, soyez conscient de cela si vous dates de table contiennent également des temps.

+0

comment faire comme, moins de 30 jours dans le passé? écrit -30 devrait fonctionner? Ça ne fonctionne pas pour moi. – Sandy

+0

@rapsalands, voir mon code mis à jour. – PaulStock

+1

donc si je veux supprimer les enregistrements juste sur la base de la date, mais pas à temps. Y a-t-il un moyen? – Sandy

Questions connexes