2011-10-10 62 views
7

Tôi cần lấy kết quả từ bảng, trong đó ngày phải khác với 5 từ ngày hiện tại.Truy vấn Mysql Datediff

tức là., specific_date cột có trong bảng của tôi. Định dạng của ngày là YYYY-MM-DD.

Tôi cần một cái gì đó giống như truy vấn,

SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5 

Trả lời

6

Dường như bạn đang cố gắng để làm điều này:

WHERE specific_date < (NOW() + 5 days) 

Trước hết, suy nghĩ cẩn thận về các trường hợp ranh giới. Những trường hợp biên này có thể cắn mắt cá chân của bạn trong SQL. Bạn có thực sự muốn

WHERE specific_date <= (NOW() + 5 days) 

làm specific_date cột timestamps của bạn có chứa chỉ vài ngày (có nghĩa là ngày với thời gian tương đương với nửa đêm) hoặc làm chúng chứa ngày tháng và thời gian? Nếu bạn muốn nhận được kết quả mong muốn, bạn cần phải cẩn thận về những chi tiết đó.

Dù sao đi nữa, hãy thử này:

WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY) 

Đây là một cách tốt để làm một tra cứu như vậy. Giá trị cột đứng một mình ở một bên của biến vị ngữ bất bình đẳng (<=) để mySQL có thể thực hiện quét phạm vi chỉ mục nếu bạn có chỉ mục trên cột.

Số học ngày trong MySQL khá linh hoạt. Bạn có thể làm

NOW() + INTERVAL 10 SECOND 
    NOW() - INTERVAL 2 MINUTE 
    NOW() + INTERVAL 4 HOUR 
    CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */ 
    LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH /*first day of present month*/ 
    NOW() - INTERVAL 1 QUARTER 
    CURDATE() - INTERVAL 5 YEAR 

v.v.

+0

Có cảm ơn, nó đã hoạt động. – sathish

+0

Điều này có hoạt động với giờ làm việc không? ví dụ: 'WHERE specific_date <= DATE_ADD (NGAY(), INTERVAL 24 HOUR)' –

+0

Có, xem chỉnh sửa của tôi. –

3

Có một cái nhìn tại các nhà điều hành BETWEEN.

expr BETWEEN min AND max 

Một cách khác là sử dụng DATE_SUB hành

WHERE date_column > DATE_SUB(NOW(), INTERVAL 5 DAY)