Risposte:
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
DATETIME
, verranno selezionati tutti i record dalla data precedente, ignorando la parte temporale. Stato eseguito 23:59:59
, la query restituirà tutti i record per le ultime 48
ore, no 24
.
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)
function getdate() does not exist
. Sostituito con current_date
e ha funzionato bene.
CURDATE()
che non ritorni una data con una porzione di tempo, quindi va a 00
. Ho risolto usando NOW()
invece di CURDATE()
.
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, MINUTI, SECONDI
Ad esempio, negli ultimi 10 minuti
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
Quale SQL non è stato specificato, SQL 2005/2008
SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())
Se utilizzi i tipi di data di maggiore accuratezza del 2008, utilizza invece la nuova funzione sysdatetime (), allo stesso modo se utilizzi gli orari UTC scambia internamente con le chiamate UTC.
Se il timestamp considerato è un timestamp UNIX È necessario prima convertire il timestamp UNIX (ad es. 1462567865) in timestamp o dati mysql
SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField)
se è necessaria un'accuratezza di millisecondi in SQL Server 2016 e versioni successive: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
select ...
from ...
where YourDateColumn >= getdate()-1
Ciao, ora sono passato molto tempo dal post originale, ma ho avuto un problema simile e voglio condividere.
Ho un campo datetime con questo formato AAAA-MM-GG hh: mm: ss e voglio accedere a un'intera giornata, quindi ecco la mia soluzione.
La funzione DATE (), in MySQL: estrae la parte data di un'espressione data o datetime.
SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'
con questo ottengo tutti i registri delle righe in questo giorno.
Spero che possa aiutare chiunque.
In SQL Server (per le ultime 24 ore):
SELECT *
FROM mytable
WHERE order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()