Seleccionar registros de AHORA () -1 día

138

¿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?

usuario1092780
fuente

Respuestas:

269

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
Jon Skeet
fuente
cómo llegar ahora, etc., significa la fecha actual para todos los registros que están disponibles en db. ? esto es solo por un día, pero necesito todo el registro ahora en palabras. @jon
Muddasir Abbas
¿Considera el tiempo local del usuario cuando los registros están en UTC?
Adry
1
@Adry: lo dudo, pero debes probarlo cuidadosamente.
Jon Skeet
62

Tenga en cuenta que el resultado puede ser ligeramente diferente de lo esperado.

NOW()devuelve a DATETIME.

Y INTERVALfunciona 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.

William Dan Terry
fuente
Up vote for CURDATE ()
robar
17

Ya casi estás allí: es NOW() - INTERVAL 1 DAY

dasblinkenlight
fuente
8

Seguro que puede:

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
Marco Miltenburg
fuente
Confuso usando DATE_ADDentonces -1 day.
Andrew Atkinson el
8

No vi ninguna respuesta correctamente usando DATE_ADDo 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)
Andrew Atkinson
fuente
1

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
Michael de Oz
fuente