Si los registros se almacenan como DATETIME, esto seleccionará todos los registros de la fecha anterior, sin tener en cuenta la parte de tiempo. Ejecutado en 23:59:59, la consulta devolverá todos los registros de las últimas 48horas, no 24.
Quassnoi
18
Si desea seleccionar las últimas 24 horas de un campo de fecha y hora, sustituya 'curate ()' con 'now ()'. Esto también incluye el tiempo.
Haentz
564
En MySQL:
SELECT*FROM mytable
WHERE record_date >= NOW()- INTERVAL 1 DAY
En SQL Server:
SELECT*FROM mytable
WHERE record_date >= DATEADD(day,-1, GETDATE())
En Oracle:
SELECT*FROM mytable
WHERE record_date >= SYSDATE -1
En PostgreSQL:
SELECT*FROM mytable
WHERE record_date >= NOW()-'1 day'::INTERVAL
En Redshift:
SELECT*FROM mytable
WHERE record_date >= GETDATE()-'1 day'::INTERVAL
En SQLite:
SELECT*FROM mytable
WHERE record_date >= datetime('now','-1 day')
Intento la consulta para mysql pero si son las 2AM, por ejemplo, obtengo los registros de 00 a 02 AM. Dos horas solo en lugar de 24. ¿Alguna idea?
Manos
Me gusta mucho la solución provista aquí, solo lo que noté en MySQL es que el rendimiento de la solución Guillaume Flandre fue más rápido.
oneworld
1
En Amazon Redshift, entiendo function getdate() does not exist. Lo reemplazó current_datey funcionó bien.
FloatingRock
1
Esta respuesta me hace desear que hubiera un botón de "estrella", ya que quiero marcar esto.
Brian Risk
1
@Manos En MySQL, parece CURDATE()que no devuelve una fecha con una porción de tiempo, por lo que continúa 00. Lo arreglé usando en NOW()lugar de CURDATE().
4castle
21
MySQL:
SELECT*FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)
El INTERVALO puede ser en AÑO, MES, DÍA, HORA, MINUTO, SEGUNDO
Por ejemplo, en los últimos 10 minutos
SELECT*FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
Esta es la respuesta que mejor responde a la pregunta específica: Cómo devolver las 24 HORAS PRECEDENTES (del momento presente), en lugar de las 24 anteriores (lo que sugiere todos los resultados del día anterior). Esto respondió a mis requisitos, esto recibe mi voto positivo. EDITAR: Vale la pena mencionar que la columna table_name.the_date debería ser una marca de tiempo.
Anthony Cregan
8
Qué SQL no se especificó, SQL 2005/2008
SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())
Si está utilizando los tipos de fecha de mayor precisión de 2008, use la nueva función sysdatetime () en su lugar, igualmente si usa las horas UTC, cambie internamente a las llamadas UTC.
Si la marca de tiempo considerada es una marca de tiempo UNIX, primero debe convertir la marca de tiempo UNIX (por ejemplo, 1462567865) a la marca de tiempo o datos de mysql
Eso supone que el motor que se está utilizando es MySQL ya que FROM_UNIXTIME () es una función de MySQL. Para uso de SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) si necesita una precisión de milisegundos en SQL Server 2016 y uso posterior: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
Este es el único que funcionó para mí en mySQL. Por alguna razón cuando probé SELECT * FROM myTable WHERE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVALO 24 HORAS); Todavía estaba obteniendo registros del 14/06/2018.
jDub9
1
SELECT*FROM tableName
WHERE datecolumn >= dateadd(hour,-24,getdate())
¿por qué necesitaría agregar "y order_date <= GETDATE ()" cuando ya está buscando las últimas 24 horas desde el momento de la ejecución de esa consulta? Realmente no tiene sentido tener esa parte en la cláusula where cuando ya tienes "GETDATE" mencionado en la primera. Es mejor que lo hagas "order_date> = DateAdd (DAY, -1, GETDATE ())" ¡eso es todo!
Respuestas:
fuente
DATETIME
, esto seleccionará todos los registros de la fecha anterior, sin tener en cuenta la parte de tiempo. Ejecutado en23:59:59
, la consulta devolverá todos los registros de las últimas48
horas, no24
.En
MySQL
:En
SQL Server
:En
Oracle
:En
PostgreSQL
:En
Redshift
:En
SQLite
:En
MS Access
:fuente
function getdate() does not exist
. Lo reemplazócurrent_date
y funcionó bien.CURDATE()
que no devuelve una fecha con una porción de tiempo, por lo que continúa00
. Lo arreglé usando enNOW()
lugar deCURDATE()
.MySQL:
El INTERVALO puede ser en AÑO, MES, DÍA, HORA, MINUTO, SEGUNDO
Por ejemplo, en los últimos 10 minutos
fuente
Qué SQL no se especificó, SQL 2005/2008
Si está utilizando los tipos de fecha de mayor precisión de 2008, use la nueva función sysdatetime () en su lugar, igualmente si usa las horas UTC, cambie internamente a las llamadas UTC.
fuente
en postgres, suponiendo que su tipo de campo es una marca de tiempo:
fuente
Si la marca de tiempo considerada es una marca de tiempo UNIX, primero debe convertir la marca de tiempo UNIX (por ejemplo, 1462567865) a la marca de tiempo o datos de mysql
fuente
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField)
si necesita una precisión de milisegundos en SQL Server 2016 y uso posterior:SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
fuente
Hola, ya pasé mucho tiempo desde la publicación original, pero tuve un problema similar y quiero compartirlo.
Tengo un campo de fecha y hora con este formato AAAA-MM-DD hh: mm: ss, y quiero acceder a todo un día, así que aquí está mi solución.
La función DATE (), en MySQL: Extrae la parte de fecha de una expresión de fecha o fecha y hora.
con esto consigo todo el registro de la fila en este día.
Espero que sea de ayuda para cualquiera.
fuente
fuente
En SQL Server (durante las últimas 24 horas):
fuente