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?

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

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.


Up vote for CURDATE ()
robar



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)

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.