2010-12-06 9 views
36

Deseo encontrar una declaración de SQL que cuando se ejecute elimina los campos que son más antiguos que 30 días.sql declaración de eliminación donde la fecha es mayor que 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()) 
+0

realidad .... Borra "campos" ?? Borras filas, no campos. ¿Quieres NULL los campos? –

+0

Su SQL arriba seleccionará las filas donde los días están dentro de los últimos 30 días. –

+0

@ Colin ¡sí! Gracias ! – Alex

Respuesta

78

Uso DATEADD en su cláusula WHERE:

... 
WHERE date < DATEADD(day, -30, GETDATE()) 

También puede utilizar la abreviatura d o dd en lugar de day.

+0

Si necesita 1 mes en lugar de 30 días en promedio por mes, puede modificarlo a DATEADD (MES, -5, GETDATE()) – iMatoria

+0

FUNCIÓN fu_dev.DATEADD no existe. ¿Por qué recibo este error? fu_dev es mi base de datos. – Shaonline

8

Aunque la 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 por 30 días a partir de ahora, es decir, horas, minutos, segundos, etc.? O 30 días a partir de la medianoche de hoy (por ejemplo, 12/06/2010 00: 00: 00,000). En cuyo caso, usted podría considerar:

SELECT * 
FROM Results 
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112) 
+0

¡Gracias por la respuesta detallada! – Alex

+0

Pulgares arriba para señalar que horas, minutos y segundos influirán en el resultado. – r41n

1

También podría 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 
0

En lugar de convertir a varchar para obtener sólo el día (convert (varchar (8), [ Date], 112)), prefiero mantenerlo como un campo de fecha y hora y convertirlo solo en la fecha (sin el tiempo).

SELECT * FROM Results 
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE()) 
0

También es posible usar

SELECT * de resultados en los que la fecha < NOW() - Intervalo de 30 días;

0

para eliminar registros de una tabla que tiene un valor de fecha y hora en Date_column más de 30 días utilizan 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 tiene un valor de fecha y hora en Fecha_columna 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 tiene un valor de fecha y hora en Date_column más de 15 minutos:

USE Database_name; 
DELETE FROM Table_name 
WHERE Date_column < DATEADD(mi,-15,GETDATE()) 

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

Cuestiones relacionadas