需要三个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天内但未包含/或
的所有包裹结果 - 无
感谢您的帮助。
答案 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)