Jeśli rekordy są przechowywane jako 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 48godzin, a nie 24.
Quassnoi,
18
Jeśli chcesz wybrać ostatnie 24 godziny z pola daty i godziny, zamień „curate ()” na „now ()”. Obejmuje to także czas.
Haentz
564
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')
Oto odpowiedź, która najlepiej odpowiada na konkretne pytanie: Jak zwrócić WCZEŚNIEJSZE 24 GODZINY (od chwili obecnej), w przeciwieństwie do poprzednich 24 (co sugeruje wszystkie wyniki z poprzedniego dnia). To spełniło moje wymagania, zyskało moje poparcie. EDYCJA: Warto wspomnieć o nazwie nazwa_tabeli. Kolumna_data powinna być znacznikiem czasu.
Anthony Cregan
8
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
Zakłada się, że używany silnik to MySQL, ponieważ FROM_UNIXTIME () jest funkcją MySQL. Do użytku z programem SQL Server: 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)
To jedyny, który działał dla mnie na mySQL. Z jakiegoś powodu, kiedy próbowałem WYBIERZ * z myTable GDZIE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 HOUR); Wciąż otrzymywałem rekordy od 14.06.2018.
jDub9
1
SELECT*FROM tableName
WHERE datecolumn >= dateadd(hour,-24,getdate())
dlaczego miałbyś dodawać „i order_date <= GETDATE ()”, gdy już szukasz ostatnich 24 godzin od momentu wykrycia tego zapytania? Naprawdę nie ma sensu mieć tej części w klauzuli where, gdy masz już napis „GETDATE” w pierwszym. Lepiej, żeby to było „order_date> = DateAdd (DAY, -1, GETDATE ())” to wszystko!
Odpowiedzi:
źródło
DATETIME
, spowoduje to wybranie wszystkich rekordów z poprzedniej daty, niezależnie od części czasu. Uruchomione o23:59:59
, zapytanie zwróci wszystkie rekordy z ostatnich48
godzin, a nie24
.W
MySQL
:W
SQL Server
:W
Oracle
:W
PostgreSQL
:W
Redshift
:W
SQLite
:W
MS Access
:źródło
function getdate() does not exist
. Zastąpiłem gocurrent_date
i działało dobrze.CURDATE()
nie zwraca daty z określoną częścią czasu, więc idzie do00
. Naprawiłem to za pomocąNOW()
zamiastCURDATE()
.MySQL:
INTERWAŁ może być w ROKU, MIESIĄCU, DNIU, GODZINIE, MINUTIE, SEKUNDIE
Na przykład w ciągu ostatnich 10 minut
źródło
Który SQL nie został określony, SQL 2005/2008
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.
źródło
w postgres, zakładając, że typ pola jest znacznikiem czasu:
źródło
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
źródło
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)
źródło
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.
dzięki temu otrzymuję cały rejestr wierszy w tym dniu.
Mam nadzieję, że każdemu pomoże.
źródło
źródło
W SQL Server (z ostatnich 24 godzin):
źródło