2012-07-05 196 views
2

需要三個sql查詢的幫助。SQL查詢幫助 - 在開始日期和結束日期之間選擇

我們的數據庫存放以下信息 - 樣品給

unique id -- package   -- startdate -- enddate 
1   -- Holiday Package 1 -- 05-08-2012 -- 05-25-2012 
2   -- Holiday Package 2 -- 05-13-2012 -- 06-26-2012 
3   -- Holiday Package 3 -- 05-14-2012 -- 05-14-2012 
4   -- Holiday Package 4 -- 05-15-2012 -- 05-16-2012 
5   -- Holiday Package 5 -- 05-21-2012 -- 07-16-2012 

查詢1 - 今天給定的日期(05-11-2012)返回躺在內未來七天

因此,舉例來說,所有的包如果日期是05-11-2012,我希望查詢返回當前7天內運行的所有包。因此在本例中,這將是一切的除了假日套餐5

查詢2 - 鑑於今天的日期返回騙14天之內,所有的軟件包,但不7天

結果 - 包5只

查詢3 - 鑑於今天的日期返回騙內都7天和14天這一點,但也不全包/或

結果 - 無

感謝您的幫助。

+2

你正在使用哪個數據庫g sql server/mysql/oracle ..? – manurajhada

回答

0

你可以使用

startdate > "given_date" and enddate < "given_date" + 7 

startdate > "given_date" + 7 and enddate < "given_date" + 14 

Combination of both the above conditions using "and" 
0

查詢1 -

declare @dte date='05-11-2012'; 
select * from Holiday_Package 
where startdate <= DATEADD(d,7,@dte) 
and enddate >= @dte 

查詢2 -

declare @dte date='05-11-2012'; 
select * from Holiday_Package 
where startdate between DATEADD(d,7,@dte) and DATEADD(d,14,@dte) 
and enddate >= @dte 

查詢3 -

declare @dte date='05-11-2012'; 
select * from Holiday_Package 
where startdate between DATEADD(d,7,@dte) and DATEADD(d,14,@dte) 
and enddate between DATEADD(d,7,@dte) and DATEADD(d,14,@dte) 
2

有時看似複雜的問題可以有非常簡單的答案。請嘗試以下操作:

1)

SELECT * 
FROM PackageTbl 
WHERE :MyDate BETWEEN StartDate-7 AND EndDate 

2)

SELECT * 
FROM PackageTbl 
WHERE :MyDate BETWEEN StartDate-14 AND StartDate-8 

3)我不太明白您的預計結果此查詢,下面的查詢應該返回包1和2 (AND部分可能不是必需的,僅僅是一些數據庫服務器可能需要的預防措施):

SELECT * 
FROM PackageTbl 
WHERE :MyDate BETWEEN StartDate-7 AND EndDate-14 
    AND EndDate >= StartDate+7 
相關問題