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
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
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
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. –
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. –
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)
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.
Eliminar en YourTable donde DateColumn < getdate() - 1
- 1. Cómo eliminar archivos anteriores a X horas
- 2. SQL seleccionando registros con fechas anteriores al día de hoy
- 3. SQL Server 2008 a SQL Server 2005
- 4. Optimizar Eliminar en SQL Server
- 5. Compatibilidad con versiones anteriores de SQL Server en Entity Framework?
- 6. Eliminar filas "duplicadas" en SQL Server 2010
- 7. Obtenga el primer día de la semana en SQL Server
- 8. Eliminar problemas anteriores en Xcode
- 9. Cómo eliminar el desencadenador en SQL Server?
- 10. Eliminar todas las vistas desde SQL Server
- 11. SQL Server gatillo conmutador Insertar, eliminar, actualizar
- 12. ¿Eliminar registros duplicados en SQL Server?
- 13. Eliminar un grupo de tablas en SQL Server
- 14. Restaurar SQL Server 2008 DB * a * SQL Server 2005
- 15. MySQL: Eliminar todas las filas anteriores a 10 minutos
- 16. cómo eliminar trabajos completados anteriores a x desde kue
- 17. Cambiando de usar SQL Server Express a SQL Server Compact
- 18. degradación de SQL Server 2008 a SQL Server 2005
- 19. SQL Server 2008 a SQL Server Compact Edition?
- 20. eliminar filas sqllite de android anteriores a x días
- 21. SQL Server 2005 Usar DateAdd añadir un día para una fecha
- 22. ¿Hay un SQL Server Profiler para SQL Server Express?
- 23. Cómo eliminar versiones anteriores de Xcode
- 24. grupo de SQL a día, con el recuento de
- 25. Equivalentes a SQL Server TOP
- 26. Ruby conectado a SQL Server
- 27. Oracle equivalente a SQL Server/Sybase DateDiff
- 28. Almacenar la hora del día en SQL
- 29. Eliminar versiones anteriores de Ruby (en Windows)
- 30. SQL Server se muestran los elementos en orden específico
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 " –