sql dichiarazione Cancellare la data è maggiore di 30 giorni
-
09-10-2019 - |
Domanda
Vorrei trovare un'istruzione SQL che i campi eliminati al termine eseguiti che sono più vecchi di 30 giorni.
Il mio tavolo "eventi" ha un campo "Data" che contiene la data e l'ora è stato inserito nel database.
Io non sono a casa in questo momento quindi non posso verificare questa. è buono questo ?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
Soluzione
DATEADD nella vostra clausola WHERE:
...
WHERE date < DATEADD(day, -30, GETDATE())
È inoltre possibile utilizzare d
un'abbreviazione o dd
invece di day
.
Altri suggerimenti
Anche se il DATEADD
è probabilmente il modo più transparrent di fare questo, vale la pena notare
che semplicemente getdate()-30
sarà anche sufficiente.
Inoltre, stai cercando per 30 giorni da oggi, vale a dire tra cui ore, minuti, secondi, ecc? O 30 giorni a partire dalla mezzanotte di oggi (ad esempio 12/06/2010 00: 00: 00.000). Nel qual caso, si potrebbe prendere in considerazione:
SELECT *
FROM Results
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112)
Si potrebbe anche usare
SELECT * FROM WHERE I risultati data
È anche possibile impostare tra due date:
Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO
Per eliminare record da una tabella che hanno un valore datetime in colonna_data di età superiore a 30 giorni utilizzare questa query:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < GETDATE() - 30
... o questo:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(dd,-30,GETDATE())
Per eliminare record da una tabella che hanno un valore datetime in colonna_data di età superiore a 12 ore:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(hh,-12,GETDATE())
Per eliminare record da una tabella che hanno un valore datetime in colonna_data età superiore a 15 minuti:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(mi,-15,GETDATE())
Possiamo usare questo:
DELETE FROM table_name WHERE date_column <
CAST(CONVERT(char(8), (DATEADD(day,-30,GETDATE())), 112) AS datetime)
Ma una scelta migliore è quella di utilizzare:
DELETE FROM table_name WHERE DATEDIFF(dd, date_column, GETDATE()) > 30
Il primo non è sargable (cioè funzioni sul lato destro dell'espressione quindi non può utilizzare index) e impiega 30 secondi, quest'ultimo è sargable e richiede meno di un secondo.
Invece di conversione in varchar per ottenere solo il giorno ( convert (varchar (8), [data], 112) ), preferisco tenerlo un campo datetime e rendendo solo la data ( senza il tempo).
SELECT * FROM Results
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())