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())
È stato utile?

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

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

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())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top