2011-08-25 41 views
5

Tôi cần truy vấn trong SQL.
Nếu tôi có hai cột STARTDATEEND_DATE.
Tôi muốn chọn tất cả các hàng có ngày nằm giữa hai ngày này.Chọn ngày giữa hai cột

ví dụ: startdate = 1/1/2011 VÀ enddate = 2/2/2011.

+0

Bạn có nghĩa là bạn cần một hàng cho mỗi ngày riêng lẻ giữa bắt đầu và kết thúc trong tập hợp kết quả không? – Yuck

+0

có thể trùng lặp của [Nhận danh sách các ngày giữa hai ngày] (http://stackoverflow.com/questions/510012/get-a-list-of-dates-between-two-dates) – Jacob

+0

Nếu đây là MySQL. Nếu không, xin lỗi vì cuộc bỏ phiếu gần gấp đôi nhanh chóng :) – Jacob

Trả lời

10
SELECT * FROM table1 
WHERE '2011-01-01' BETWEEN table1.startdate AND table1.enddate 

Replace ngày rõ ràng hoặc với now() hoặc một tham số hoặc bất cứ điều gì.

Nếu ENDDATE là không định nghĩa là NOT NULL bạn có thể làm:

SELECT * FROM table1 
WHERE '2011-01-01' BETWEEN table1.startdate AND COALESCE(table1.enddate, NOW()) 

Xem: http://www.1keydata.com/sql/sql-coalesce.html

+1

+1 - Nhưng tôi sẽ thay đổi enddate thành 'COALESCE (enddate, now())' – Lamak

+0

Nếu 'enddate' được định nghĩa là NOT NULL, gợi ý tốt. – Johan

0

Điều này có giúp ích cho bạn không?

select * 
from table 
where START_DATE < NOW() AND END_DATE > NOW() 

Tùy thuộc vào cơ sở dữ liệu, sử dụng CURRENT_TIMESTAMP() hoặc TODAY()

0

Bạn có nghĩa này:

select * 
from mytable 
where start_date >= '01/01/2011' 
and end_date <= '02/01/2011' 

Cho đến khi bạn làm nhiều hơn nữa để làm rõ câu hỏi của bạn, thật khó cho chúng tôi để cung cấp câu trả lời tốt hơn.

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