SQL查询帮助 - 在startdate和enddate之间进行选择

时间:2012-07-05 05:55:04

标签: 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天内运行的所有软件包。因此,在示例中,这将是除Holiday Package 5之外的所有内容。

查询2 - 鉴于今天的日期返回14天但不是7天的所有包裹

结果 - 仅限套餐5

查询3 - 鉴于今天的日期返回7天和14天内但未包含/或

的所有包裹

结果 - 无

感谢您的帮助。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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"

答案 2 :(得分: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)