2009-10-19 26 views
20

En una tabla en mi datatase tengo una columna datatime que almacena la hora en que se agrega el registro. ¿Cómo puedo eliminar todos los registros que son más antiguos que un día cuando ejecuto un procedimiento almacenado (considerando la hora actual)?Eliminar elementos anteriores a un día - SQL Server

Respuesta

28

Puede construir una declaración DELETE haciendo uso de las funciones datediff y getdate. ejemplo

Uso:

DELETE FROM yourTable WHERE DATEDIFF(day,getdate(),thatColumn) < -1 
+2

Se consiguió esto al revés. Según la pregunta, "esa columna" siempre estará en el pasado, y la forma en que escribió esto, su DATEDIFF siempre será mayor que 0. La forma correcta es: "ELIMINAR DE SU TABLE WHERE DATEDIFF (day, getdate(), thatColumn) <-1 " O bien:" ELIMINAR DE su tabla WHERE DATEDIFF (día, esaColumna, getdate())> 1 " –

5
Delete <TableName> 
Where DATEDIFF(day, <ColumnName>, getdate()) > 0 

Raj

+0

es posible que haya olvidado un 'FROM';) – KB22

+3

De no se requiere con una instrucción delete :) – Raj

+1

+ 1, mi d'oh. ^^ – KB22

0

lo general aconsejo datos realmente eliminar de su base de datos, porque nunca se sabe cuando puede que tenga que volver atrás y recuperar o reversión a registros anteriores debido a la corrupción de datos o una auditoría, etc. En cambio, agregaría un título de columna de bit algo así como "IsDeleted" y establecería las entradas de un día en true usando una declaración de actualización.

Algo así como

'UPDATE tablename SET IsDeleted = 1 WHERE (DATEDIFF(day,DateCreatedOn,GETDATE()) > 0) 

Dónde DateCreatedOn es donde se crea o fecha de marca de tiempo iría

+3

Esta es una generalización difícil sin saber el problema establecido. Hay tantas buenas razones para eliminar datos como no. Si necesita deshacer o recuperar, es por eso que tiene copias de seguridad. Si el funcionamiento estándar de su aplicación significa que ya no necesita los datos, elimine los datos. – Joe

+0

Si nunca borras datos, eventualmente - inevitablemente - mesas sobrepobladas llevarán a un rendimiento degradado. Si debe mantener los datos "calientes", copiarlos en una tabla de archivo y luego eliminarlos de la fuente, tal vez después de horas, debería ser una opción viable. –

+0

Admitiré que es un poco demasiado celoso, pero es mejor tenerlo y no necesitarlo, luego no tenerlo y necesitarlo. Imagine el tipo de respuesta que recibiría de un cliente que dice que necesita todos los registros de ventas de su aplicación de comercio electrónico durante los últimos 5 años y su respuesta es "Lo borramos porque era viejo y no lo necesita el solicitud". El hecho de que la aplicación en sí misma no necesite los datos, no significa que el cliente no la necesite y puede prescindir de ella. –

-1

o

ts> = ahora su registro() - 1 DÍA DE INTERVALOS

donde ts es el nombre de la columna de fecha y hora

+1

¿Y sus trabajos en SQL Server? – gbn

+0

Sí lo hace. Al menos en MySQL. – Zepplock

+0

Lea la documentación antes de -1 otras personas – Zepplock

28

Cuando se trata de SQL, debe especificar lo que quiere decir con "más antiguo que un día".

  • DATEDIFF: utiliza la medianoche límite entre el día así que ejecutarlo en el 19 de octubre de 00:05 y se eliminarán las filas 6 minutos de edad (18 de Octubre 23:59)

  • 24 horas?

  • ¿Ayer a la medianoche? ¿Ejecutar código el 19 de octubre, eliminar filas antes del 18?

Además, no coloque una función en una columna.

Esto supone 24 horas al minuto:

DELETE 
    MyTableWhere 
WHERE 
    MyColumn < DATEADD(day, -1, GETDATE()) 

Esto supone ayer la medianoche:

DELETE 
    MyTableWhere 
WHERE 
    MyColumn < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -1) 
0

Suponiendo columna de fecha para ser "RecordCreatedDate"

Eliminar en yourtable DONDE RecordCreatedDate < DATEADD (d, -1, GETDATE())

Solo advierto que si su base de datos tiene millones de filas, debe tener un índice en la columna RecordCreatedDate y posiblemente eliminar lotes más pequeños si va a eliminar grandes cantidades de datos.

0

Eliminar en YourTable donde DateColumn < getdate() - 1

Cuestiones relacionadas