2009-12-11 29 views

Trả lời

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

Nếu các bản ghi được lưu trữ là '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 bản ghi trong '48' giờ qua, không phải' 24'. – Quassnoi

+13

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

3
select ... 
from ... 
where YourDateColumn >= getdate()-1 
397

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) 
+2

Tôi thử truy vấn cho mysql nhưng nếu 2AM của nó, ví dụ, tôi nhận được các bản ghi từ 00 - 02 AM. Chỉ hai giờ thay vì 24. Bất kỳ ý tưởng nào? – Manos

+0

Tôi rất giống với giải pháp được cung cấp ở đây, những gì tôi đã lưu ý trong MySQL là hiệu suất của giải pháp _Guillaume Flandre_ nhanh hơn. – oneworld

+1

Câu trả lời hoàn hảo! – Bertie

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

nào SQL đã không quy định, SQL 2005/2008

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

Nếu bạn đang trên 2008 tăng loại ngày chính xác, sau đó sử dụng sysdatetime mới() chức năng thay vào đó, không kém nếu sử dụng UTC lần trong nội bộ trao đổi với UTC cuộc gọi.

0

Trong SQL Server (Đối với 24 giờ qua):

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

tại sao bạn cần phải thêm "và order_date <= GETDATE()" khi bạn đang tìm kiếm 24 giờ qua hình thức thời điểm thoát khỏi truy vấn đó? Nó thực sự làm cho không có ý nghĩa để có một phần trong mệnh đề where khi bạn có "GETDATE" đã được đề cập trong lần đầu tiên. Bạn nên làm cho nó "order_date> = DateAdd (DAY, -1, GETDATE())" thats it! – KMX

6

trong postgres, giả sử loại lĩnh vực của bạn là một dấu thời gian:

select * from bàn nơi date_field> (nay() - khoảng thời gian '24 giờ ');

16

MySQL:

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

Các INTERVAL có thể trong năm, tháng, ngày, giờ, phút, giây

Ví dụ, Trong 10 phút cuối

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

Đây là câu trả lời phù hợp nhất với câu hỏi cụ thể: Cách trả về 24 GIỜ (từ thời điểm hiện tại), trái với 24 trước (cho biết tất cả kết quả cho ngày trước đó). Điều này đã trả lời các yêu cầu của tôi, điều này nhận được sự ủng hộ của tôi. EDIT: giá trị của nó đề cập đến cột table_name.the_date nên là một dấu thời gian. –

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) thành dấu thời gian mysql hoặc dữ liệu

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

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

Tôi nhận được trường ngày giờ có đị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 giờ.

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ả đăng ký hàng trong ngày này.

Tôi hy vọng sẽ giúp mọi người.

Các vấn đề liên quan