SQL kullanarak son 24 saatteki kayıtlar nasıl seçilir?


185

whereSon 24 saat kayıt almak için kullanılabilecek bir madde mi arıyorum ?


1
Bu kayıtlarda zaman damgası alanınız var mı?
— Shawn Steward

Yanıtlar:


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

6
Kayıtlar şu şekilde saklanırsa DATETIME, zaman bölümü dikkate alınmadan önceki tarihten itibaren tüm kayıtlar seçilir. Konumunda çalıştırıldığında 23:59:59, sorgu son 48saatlerin tüm kayıtlarını döndürür, döndürmez 24.
— Quassnoi

18
Tarih saat alanından son 24 saati seçmek istiyorsanız, 'curate ()' yerine 'now ()' yazın. Buna zaman da dahildir.
— Haentz

564

İçinde MySQL:

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

İçinde SQL Server:

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

İçinde Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

İçinde PostgreSQL:

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

İçinde Redshift:

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

İçinde SQLite:

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

İçinde MS Access:

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

3
Ben mysql için sorgu denemek ama onun 2AM, örneğin, 00 - 02 AM kayıtları olsun. 24 yerine sadece iki saat.
— Manos

Burada sunulan çözümü çok beğendim, MySQL'de belirttiğim gibi Guillaume Flandre çözümünün performansı daha hızlıydı.
— oneworld

1
Amazon Redshift'te anladım function getdate() does not exist. Onun yerine current_dateve iyi çalıştı.
— FloatingRock

1
Bu cevap bana yer imi koymak istediğim için bir "yıldız" düğmesi olmasını diliyor.
— Brian Risk

1
@Manos MySQL'de, CURDATE()zaman bölümü olan bir tarih döndürmüyor gibi görünüyor , bu yüzden gidiyor 00. Bunun NOW()yerine kullanarak sabitledim CURDATE().
— 4castle

21

MySQL:

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

ARALIK YIL, AY, GÜN, SAAT, DAKİKA, İKİNCİ olabilir

Örneğin, son 10 dakika içinde

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

3
Bu özel soruyu en iyi yanıtlayan cevaptır: Önceki 24'ün aksine (önceki güne ait tüm sonuçları gösteren) ÖNCEKİ 24 SAAT (şimdiki andan itibaren) nasıl iade edilir. Bu benim ihtiyaçlarımı yanıtladı, bu benim oyumu alır. EDIT: table_name.the_date sütununa değinmeye değer bir zaman damgası olmalıdır.
— Anthony Cregan

8

Hangi SQL belirtilmedi, SQL 2005/2008

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

2008 artırılmış doğruluk tarihi türlerini kullanıyorsanız, UTC saatlerini dahili olarak UTC çağrılarıyla değiştiriyorsanız, bunun yerine yeni sysdatetime () işlevini kullanın.


7

postgres'de alan türünüzün bir zaman damgası olduğunu varsayarsak:

date_field> (şimdi () - aralık '24 saat ') olan tablodan * seçin;


4

Dikkate alınan zaman damgası UNIX zaman damgasıysa Önce UNIX zaman damgasını (örn. 1462567865) mysql zaman damgasına veya verilere dönüştürmeniz gerekir

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

Bu FROM_UNIXTIME () bir MySQL işlevi olduğu için kullanılan motorun MySQL olduğunu varsayar. SQL Server kullanımı için: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) SQL Server 2016 ve sonraki sürümlerde milisaniye doğruluğa ihtiyacınız varsa: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
— luisdev


2

Merhaba ben şimdi orijinal yazı çok zaman geçmiş ama benzer bir sorun var ve paylaşmak istiyorum.

YYYY-AA-GG ss: dd: ss biçimiyle datetime alanım var ve tüm güne erişmek istiyorum, işte benim çözümüm.

MySQL'deki DATE () işlevi: Bir tarihin veya datetime ifadesinin tarih bölümünü ayıklayın.

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

Bu ile ben bu gün tüm satır kayıt olsun.

Umarım herkese yardım eder.


Bu, mySQL'de benim için çalışan tek kişi. Herhangi bir nedenle SELT * den myTable'DAN NEREDEN> DATE_SUB ('2018-06-13 00:00:00', 24 ARALIK ARALIĞI); 2018-06-14'ten hala kayıtlar alıyordum.
— jDub9

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

1

SQL Server'da (Son 24 saat için):

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

2
bu sorgunun uygulanma anından son 24 saati zaten ararken neden "ve order_date <= GETDATE ()" eklemeniz gerekiyor? İlkinde daha önce "GETDATE" yazdığınızda, nerede yan tümcesinde yer almak gerçekten bir anlam ifade etmiyor. "Order_date> = DateAdd (DAY, -1, GETDATE ())" yapsanız iyi olur!
— KMX
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.