una semestre semana quincena obtener nombre mes fecha español año sql sql-server datetime

semana - obtener semestre sql server



Eliminar elementos anteriores a un día-SQL Server (7)

En una tabla en mi base de datos tengo una columna de fecha y hora que almacena el momento 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)?


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

  • DATEDIFF: usa la medianoche del límite del día, ejecútelo a las 00:05 del 19 de octubre y eliminará las filas de 6 minutos (18 de octubre a las 23:59)

  • ¿24 horas?

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

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

Esto supone 24 horas al minuto:

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

Esto supone la medianoche de ayer :

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


Por lo general, aconsejo que no se eliminen realmente los datos de su base de datos porque nunca se sabe cuándo tendrá que volver atrás y recuperar o revertir a registros anteriores debido a la corrupción de los datos o una auditoría, etc. En lugar de eso, agregaría un título de columna de bits algo como "IsDeleted" "y establecer las entradas de un día en verdadero usando una declaración de actualización.

Algo como

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

Donde DateCreatedOn es donde iría su fecha de registro o marca de tiempo creada


Puede crear una sentencia DELETE utilizando las datediff y getdate .

Ejemplo de uso:

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


Suponiendo que la columna de fecha sea "RecordCreatedDate"

ELIMINAR DE tu tabla DÓNDE 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 realice eliminaciones de lotes más pequeñas si va a eliminar grandes cantidades de datos.


eliminar de YourTable donde DateColumn <getdate () - 1


o

ts> = ahora () - INTERVALO 1 DÍA

donde ts es un nombre de la columna datetime


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

Raj