2

需要三个 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)返回未来 7 天内的所有包裹

因此,例如,如果日期是 2012 年 5 月 11 日,我希望查询返回当前在接下来的 7 7 天内运行的所有包。因此,在示例中,这将是除假日套餐 5 之外的所有内容。

查询 2 - 给定今天的日期,退回 14 天内但不是 7 天内的所有包裹

结果 - 仅包 5

查询 3 - 给定今天的日期,返回所有在 7 天和 14 天内的包裹,但不是/或

结果 - 无

谢谢你的帮助。

4

3 回答 3

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
于 2012-07-05T17:26:25.997 回答
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"
于 2012-07-05T06:28:45.467 回答
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)
于 2012-07-05T06:34:40.153 回答