2011-09-12 32 views
7

Tôi có dữ liệu có ngày (cột Y-m-d H: i: s) (loại là ngày giờ). Tôi muốn chọn tất cả hồ sơ từ 1 tuần trước ngày tôi nhập (trong ví dụ bên dưới: 2011-09-17 00:00:00, nhưng có một số vấn đề. Đây là những gì tôi có:Chọn bản ghi từ một tuần trước đó trong mysql

SELECT * FROM emails WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), 1 week)) 

tôi đang làm gì sai Cảm ơn

Trả lời

20

tôi nghĩ rằng bạn đang bỏ lỡ INTERVAL ở phía trước của 1 week:

SELECT * 
FROM emails 
WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), INTERVAL 1 week)); 

đây là một truy vấn mà tôi chạy mà không làm việc cho các phần DATE_SUB():

SELECT * 
FROM wp_posts 
WHERE post_modified > DATE_SUB(CURDATE(), INTERVAL 4 WEEK); 

Bạn có thể sử dụng một giá trị âm để đi làm một "N tuần trước cho ngày" truy vấn nên một cái gì đó như thế này sẽ làm việc:

SELECT * 
FROM wp_posts 
WHERE post_modified > DATE_SUB(CURDATE(), INTERVAL -1 WEEK); 

Hoặc:

SELECT * 
FROM emails 
WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), INTERVAL -1 week)) 
+1

cảm ơn. Tôi đã sử dụng mã đầu tiên bạn đưa vào (tôi cần thêm "nội bộ" trước "1 tuần". –

3

Hãy thử điều này, tôi thích gắn bó với DATE_ADD và chỉ sử dụng giá trị âm.

SELECT * FROM emails WHERE date >= DATE_ADD('2011-09-17 00:00:00', INTERVAL -1 WEEK) 
3
SELECT * FROM wp_posts 
WHERE post_modified 
BETWEEN SYSDATE() - INTERVAL 7 DAY 
AND SYSDATE(); 
Các vấn đề liên quan