Làm cách nào để chọn bản ghi từ 24 giờ qua bằng SQL?


184

Tôi đang tìm kiếm một wheređiều khoản có thể được sử dụng để lấy hồ sơ trong 24 giờ qua?


1
Bạn có một trường dấu thời gian trên các hồ sơ này?
Shawn Steward

Câu trả lời:


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

6
Nếu các bản ghi được lưu trữ dưới dạng DATETIME, điều này sẽ chọn tất cả các bản ghi từ ngày trước đó, bỏ qua phần thời gian. Được chạy tại 23:59:59, truy vấn sẽ trả về tất cả các hồ sơ cho những 48giờ cuối cùng , không 24.
Quassnoi

18
Nếu bạn muốn chọn 24 giờ qua từ trường datetime, hãy thay thế 'curate ()' bằng 'now ()'. Điều này cũng bao gồm thời gian.
Haentz

562

Trong MySQL:

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

Trong SQL Server:

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

Trong Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

Trong PostgreSQL:

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

Trong Redshift:

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

Trong SQLite:

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

Trong MS Access:

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

3
Tôi thử truy vấn cho mysql nhưng ví dụ nếu 2AM, tôi nhận được các bản ghi từ 00 - 02 AM. Hai giờ chỉ thay vì 24. Có ý tưởng nào không?
Manos

Tôi rất thích giải pháp được cung cấp ở đây, chỉ là điều tôi lưu ý trong MySQL là hiệu suất của giải pháp Guillaume Flandre nhanh hơn.
onewworld

1
Trong Amazon Redshift, tôi nhận được function getdate() does not exist. Thay thế nó current_datevà nó hoạt động tốt.
FloatingRock

1
Câu trả lời này khiến tôi ước có một nút "sao" vì tôi muốn đánh dấu nó.
Brian Rủi ro

1
@Manos Trong MySQL, có vẻ như CURDATE()không trả về một ngày với một phần thời gian, vì vậy nó đi đến 00. Tôi đã sửa nó bằng cách sử dụng NOW()thay vì CURDATE().
4 lâu đài

21

MySQL:

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

INTERVAL có thể vào NĂM, THÁNG, NGÀY, GIỜ, PHÚT, THỨ HAI

Ví dụ: trong 10 phút qua

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

3
Đây là câu trả lời trả lời tốt nhất cho câu hỏi cụ thể: Cách trả lại 24 GIỜ CHÍNH XÁC (từ thời điểm hiện tại), trái ngược với 24 ngày trước (gợi ý tất cả kết quả cho ngày hôm trước). Điều này đã trả lời yêu cầu của tôi, điều này nhận được upvote của tôi. EDIT: Giá trị của nó đề cập đến cột tên_bảng.the_date phải là dấu thời gian.
Anthony Cregan

8

SQL nào không được chỉ định, SQL 2005/2008

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

Nếu bạn đang sử dụng loại ngày chính xác tăng 2008, thì hãy sử dụng hàm sysdatetime () mới, bằng nhau nếu sử dụng thời gian UTC hoán đổi nội bộ sang các cuộc gọi UTC.


7

trong postgres, giả sử loại trường của bạn là dấu thời gian:

chọn * từ bảng trong đó date_field> (now () - khoảng '24 giờ ');


4

Nếu dấu thời gian được xem là dấu thời gian UNIX Trước tiên, bạn cần chuyển đổi dấu thời gian UNIX (ví dụ: 1462567865) sang dấu thời gian hoặc dữ liệu mysql

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

Giả sử công cụ đang được sử dụng là MySQL vì FROM_UNIXTIME () là một chức năng của MySQL. Đối với SQL Server sử dụng: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) Nếu bạn cần độ chính xác mili giây trong SQL Server 2016 và sau đó sử dụng: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
luonomev


2

Xin chào tôi bây giờ nó đã qua rất nhiều thời gian từ bài viết gốc nhưng tôi đã gặp một vấn đề tương tự và tôi muốn chia sẻ.

Tôi đã nhận được một trường datetime với định dạng này YYYY-MM-DD hh: mm: ss và tôi muốn truy cập cả ngày, vì vậy đây là giải pháp của tôi.

Hàm DATE (), trong MySQL: Trích xuất phần ngày của biểu thức ngày hoặc ngày.

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

với điều này tôi nhận được tất cả các đăng ký hàng trong ngày này.

Tôi hy vọng nó sẽ giúp bất cứ ai.


Đây là người duy nhất làm việc cho tôi trên myQuery. Vì một số lý do khi tôi đã thử CHỌN * TỪ myTable WHERE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 GIỜ); Tôi vẫn nhận được hồ sơ từ 2018-06-14.
jDub9

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

1

Trong SQL Server (Trong 24 giờ qua):

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

2
tại sao bạn cần thêm "và order_date <= GETDATE ()" khi bạn đang tìm kiếm trong 24 giờ qua hình thành thời điểm xuất hiện của truy vấn đó? Thật sự vô nghĩa khi có phần đó trong mệnh đề where khi bạn đã "GETDATE" trong phần đầu tiên. Tốt hơn bạn nên làm cho nó "order_date> = DateAdd (NGÀY, -1, GETDATE ())" đó là nó!
KMX
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.