sql server - tipo - declaración de eliminación de sql donde la fecha es mayor a 30 días
sql server comparar fechas mayor (7)
Deseo encontrar una declaración SQL que cuando se ejecute elimine los campos que tienen más de 30 días.
Mi tabla "eventos" tiene un campo "fecha" que contiene la fecha y la hora en que se insertó en la base de datos.
No estoy en casa ahora mismo, así que no puedo probar esto. es esto bueno ?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
Aunque el DATEADD
es probablemente la forma más transparente de hacer esto, vale la pena señalar que simplemente getdate()-30
también será suficiente.
Además, ¿está buscando dentro de 30 días, es decir, incluyendo horas, minutos, segundos, etc.? O 30 días a partir de la medianoche de hoy (p. Ej. 12/06/2010 00: 00: 00.000). En cuyo caso, podrías considerar:
SELECT *
FROM Results
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112)
En lugar de convertir a varchar para obtener solo el día ( convertir (varchar (8), [Fecha], 112) ), prefiero mantenerlo en un campo de fecha y hora y solo en la fecha (sin la hora).
SELECT * FROM Results
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())
Para eliminar registros de una tabla que tienen un valor de fecha y hora en Date_column con más de 30 días, use esta consulta:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < GETDATE() - 30
...o esto:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(dd,-30,GETDATE())
Para eliminar registros de una tabla que tienen un valor de fecha y hora en Date_column anterior a 12 horas:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(hh,-12,GETDATE())
Para eliminar registros de una tabla que tienen un valor de fecha y hora en Date_column anterior a 15 minutos:
USE Database_name;
DELETE FROM Table_name
WHERE Date_column < DATEADD(mi,-15,GETDATE())
Podemos usar esto:
DELETE FROM table_name WHERE date_column <
CAST(CONVERT(char(8), (DATEADD(day,-30,GETDATE())), 112) AS datetime)
Pero una mejor opción es usar:
DELETE FROM table_name WHERE DATEDIFF(dd, date_column, GETDATE()) > 30
El primero no es sargable (es decir, funciona en el lado derecho de la expresión, por lo que no puede usar el índice) y toma 30 segundos, el último es sargable y toma menos de un segundo.
También podrías usar
SELECCIONE * de los Resultados DÓNDE fecha <AHORA () - INTERVALO 30 DÍAS;
También puede establecer entre dos fechas:
Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO
Use DATEADD en su cláusula WHERE:
...
WHERE date < DATEADD(day, -30, GETDATE())
También puede utilizar la abreviatura d
o dd
lugar de day
.