¿Hay alguna forma en una declaración MySQL de ordenar registros (a través de un sello de fecha) por> = AHORA () -1 para que se seleccionen todos los registros desde el día anterior hasta el futuro?
¿Hay alguna forma en una declaración MySQL de ordenar registros (a través de un sello de fecha) por> = AHORA () -1 para que se seleccionen todos los registros desde el día anterior hasta el futuro?
Respuestas:
A juzgar por la documentación de las funciones de fecha / hora , debería poder hacer algo como:
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
Tenga en cuenta que el resultado puede ser ligeramente diferente de lo esperado.
NOW()
devuelve a DATETIME
.
Y INTERVAL
funciona como se nombra, por ejemplo INTERVAL 1 DAY = 24 hours
.
Por lo tanto, si su secuencia de comandos está programada para ejecutarse 03:00
, perderá el first three hours of records from the 'oldest' day
.
Para aprovechar todo el día CURDATE() - INTERVAL 1 DAY
. Esto volverá al comienzo del día anterior, independientemente de cuándo se ejecute el script.
Ya casi estás allí: es NOW() - INTERVAL 1 DAY
Seguro que puede:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
DATE_ADD
entonces -1 day
.
No vi ninguna respuesta correctamente usando DATE_ADD
o DATE_SUB
:
Restar 1 día de NOW()
...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)
Agregar 1 día desde NOW()
...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)
cuando el campo de búsqueda tiene una marca de tiempo y desea buscar registros de 0 horas ayer y 0 horas hoy, use construcción
MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))
en lugar
now() - interval 1 day