Odpowiedzi:
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
DATETIME
, spowoduje to wybranie wszystkich rekordów z poprzedniej daty, niezależnie od części czasu. Uruchomione o 23:59:59
, zapytanie zwróci wszystkie rekordy z ostatnich 48
godzin, a nie 24
.
W MySQL
:
SELECT *
FROM mytable
WHERE record_date >= NOW() - INTERVAL 1 DAY
W SQL Server
:
SELECT *
FROM mytable
WHERE record_date >= DATEADD(day, -1, GETDATE())
W Oracle
:
SELECT *
FROM mytable
WHERE record_date >= SYSDATE - 1
W PostgreSQL
:
SELECT *
FROM mytable
WHERE record_date >= NOW() - '1 day'::INTERVAL
W Redshift
:
SELECT *
FROM mytable
WHERE record_date >= GETDATE() - '1 day'::INTERVAL
W SQLite
:
SELECT *
FROM mytable
WHERE record_date >= datetime('now','-1 day')
W MS Access
:
SELECT *
FROM mytable
WHERE record_date >= (Now - 1)
function getdate() does not exist
. Zastąpiłem go current_date
i działało dobrze.
CURDATE()
nie zwraca daty z określoną częścią czasu, więc idzie do 00
. Naprawiłem to za pomocą NOW()
zamiast CURDATE()
.
MySQL:
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)
INTERWAŁ może być w ROKU, MIESIĄCU, DNIU, GODZINIE, MINUTIE, SEKUNDIE
Na przykład w ciągu ostatnich 10 minut
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
Który SQL nie został określony, SQL 2005/2008
SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())
Jeśli używasz typów dat o podwyższonej dokładności w 2008 r., Zamiast tego użyj nowej funkcji sysdatetime (), podobnie jeśli używasz czasów UTC wewnętrznie zamieniających się na wywołania UTC.
Jeśli rozważany znacznik czasu jest znacznikiem czasu UNIX, należy najpierw przekonwertować znacznik czasu UNIX (np. 1462567865) na znacznik czasu mysql lub dane
SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField)
Jeśli potrzebujesz dokładności do milisekund w programie SQL Server 2016 i nowszych, użyj: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
select ...
from ...
where YourDateColumn >= getdate()-1
Witaj, minęło już dużo czasu od oryginalnego postu, ale mam podobny problem i chcę się podzielić.
Mam pole daty i godziny w tym formacie RRRR-MM-DD gg: mm: ss i chcę uzyskać dostęp przez cały dzień, więc oto moje rozwiązanie.
Funkcja DATE () w MySQL: Wyodrębnij część daty wyrażenia date lub datetime.
SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'
dzięki temu otrzymuję cały rejestr wierszy w tym dniu.
Mam nadzieję, że każdemu pomoże.
W SQL Server (z ostatnich 24 godzin):
SELECT *
FROM mytable
WHERE order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()