2012-10-31 38 views
14

Nếu tôi có 2 cột ngày trong một bảng, startDateendDate. Làm thế nào để tôi trả lại các hàng có một ngày nhất định phù hợp giữa 2 ngày đó? Ví dụ:Kiểm tra xem một ngày cụ thể có khớp với một phạm vi ngày

Nếu ngày nhất định là 2012-10-25

Cần trả lại hàng sau

startDate - endDate 
2012-10-25 - 2012-10-25 
2011-09-10 - 2013-11-15 
2012-10-20 - 2012-10-25 
2012-10-23 - 2012-10-28 
2012-09-14 - 2012-10-28 

từ các hàng sau:

startDate - endDate 
2012-10-25 - 2012-10-25 
2011-09-10 - 2013-11-15 
2012-01-11 - 2012-10-11 
2012-10-20 - 2012-10-25 
2012-04-15 - 2012-04-16 
2012-05-20 - 2012-05-25 
2012-12-01 - 2012-12-10 
2012-10-23 - 2012-10-28 
2012-09-14 - 2012-10-28 
2012-11-13 - 2012-12-15 

Đây có phải là có thể với sql?

Tôi đang sử dụng SQL Server 2008.

Trả lời

37

Với SQL Server nó thực sự đơn giản như:

SELECT startDate, endDate 
FROM YourTable 
WHERE '2012-10-25' between startDate and endDate 
+0

gì nếu tôi có hai ngày để thấy rằng ngày giữa hai ngày đã có sẵn giữa ngày bắt đầu này hoặc không phải. –

+0

Giống như ngày bắt đầu là 1 ngày kết thúc là 10 nếu tôi có hai ngày 3 là ngày bắt đầu và 6 là ngày kết thúc. vì vậy tôi có thể thấy rằng 3 & 6 nằm trong khoảng từ 1 đến 10. –

3

Kiểm tra BETWEEN từ khóa.

Cú pháp rất đơn giản:

SELECT col1, col2 
FROM table1 
WHERE date_col BETWEEN '2012-10-25' and 2012-10-28 
0

cho lappingcheck khác sau đây có thể là thú

Select * from sted where [dbo].[F_LappingDays](Startdate,EndDate,'20121025','20121025')=1 


CREATE Function [dbo].[F_LappingDays](@Von1 datetime,@bis1 Datetime,@von2 Datetime,@bis2 Datetime) Returns int as 
/* 
20110531 Thomas Wassermann 
Terminüberschneidungen finden 
*/ 
begin 
Declare @Result int 

Select @Result = 0 
if (@Von1>[email protected]) and (@bis1<[email protected]) 
    begin 
     Select @Result=Cast(@Bis1 - @von1 + 1 as Int) 
    end 

else if (@Von1<[email protected]) and (@bis1 > @Von2) and (@bis1<[email protected]) 
    begin 
     Select @Result=Cast(@Bis1 - @von2 + 1 as Int) 
    end 

else if (@Von1>[email protected]) and (@von1<[email protected]) and (@bis1>@Bis2) 
    begin 
     Select @Result=Cast(@Bis2 - @von1 + 1 as Int) 
    end 

else if (@Von1<@Von2) and (@bis1>@Bis2) 
    begin 
     Select @Result=Cast(@Bis2 - @von2 + 1 as Int) 
    end 



Return @Result 
end 
Các vấn đề liên quan