2009-12-11 17 views

risposta

80
SELECT * 
FROM table_name 
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
+2

Se i record sono memorizzati come 'DATETIME', questo selezionerà tutti i record dalla data precedente, ignorando la parte relativa all'ora. Eseguito a '23: 59: 59', la query restituirà tutti i record per le ultime 48 ore, non' 24'. – Quassnoi

+13

Se si desidera selezionare le ultime 24 ore da un campo datetime, sostituire "curate()" con "now()". Questo include anche il tempo. – Haentz

3
select ... 
from ... 
where YourDateColumn >= getdate()-1 
397

In MySQL:

SELECT * 
FROM mytable 
WHERE record_date >= NOW() - INTERVAL 1 DAY 

In SQL Server:

SELECT * 
FROM mytable 
WHERE record_date >= DATEADD(day, -1, GETDATE()) 

In Oracle:

SELECT * 
FROM mytable 
WHERE record_date >= SYSDATE - 1 

In PostgreSQL:

SELECT * 
FROM mytable 
WHERE record_date >= NOW() - '1 day'::INTERVAL 

In Redshift:

SELECT * 
FROM mytable 
WHERE record_date >= GETDATE() - '1 day'::INTERVAL 

In SQLite:

SELECT * 
FROM mytable 
WHERE record_date >= datetime('now','-1 day') 

In MS Access:

SELECT * 
FROM mytable 
WHERE record_date >= (Now - 1) 
+2

Provo la query per mysql ma se il suo 2AM, ad esempio, ottengo i record da 00 a 02 AM. Solo due ore invece di 24. Qualche idea? – Manos

+0

Mi piace molto la soluzione fornita qui, solo quello che ho notato in MySQL è la performance della soluzione _Guillaume Flandre_ era più veloce. – oneworld

+1

Risposta perfetta! – Bertie

1
SELECT * 
FROM tableName 
WHERE datecolumn >= dateadd(hour,-24,getdate()) 
8

cui SQL non è stato specificato, SQL 2005/2008

SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate()) 

Se siete sul 2008 è salito tipi data la precisione, quindi utilizzare la funzione nuova sysdatetime(), invece, altrettanto se si utilizza UTC volte scambiare internamente al UTC chiamate.

0

In SQL Server (per ultime 24 ore):

SELECT * 
FROM mytable 
WHERE order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE() 
+1

perché dovresti aggiungere "e order_date <= GETDATE()" quando stai già cercando le ultime 24 ore dal momento dell'execisione di quella query? Non ha senso avere quella parte nella clausola where quando hai "GETDATE" già menzionato nel primo. È meglio farlo "order_date> = DateAdd (DAY, -1, GETDATE())" questo è tutto! – KMX

6

in Postgres, supponendo che il tipo di campo è un timestamp:

select * from tabella in cui date_field> (ora() - intervallo '24 ore ');

16

MySQL:

SELECT * 
FROM table_name 
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR) 

L'intervallo può essere in anno, mese, giorno, ora, minuto, secondo

Ad esempio, negli ultimi 10 minuti

SELECT * 
FROM table_name 
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE) 
+1

Questa è la risposta che meglio risponde alla domanda specifica: Come restituire il PRECEDING 24 ORE (dal momento presente), in contrasto con il precedente 24 (che suggerisce tutti i risultati per il giorno precedente). Questo ha risposto alle mie esigenze, questo ottiene il mio upvote. EDIT: Vale la pena menzionare la table_name.the_date column dovrebbe essere un timestamp. –

4

Se il timestamp considerato è un timestamp UNIX È necessario prima convertire la data/ora UNIX (ad esempio 1462567865) in data/ora mysql o data

SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
0

Ciao ora ho passato un sacco di tempo dal post originale ma ho avuto un problema simile e voglio condividere.

Ho ottenuto un campo datetime con questo formato AAAA-MM-GG hh: mm: ss, e voglio accedere a un giorno intero, quindi ecco la mia soluzione.

La funzione DATE(), in MySQL: consente di estrarre la parte della data di un'espressione data o data/ora.

SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09' 

con questo ottengo tutto il registro di riga in questo giorno.

Spero che sia di aiuto a chiunque.

Problemi correlati