我的英语太糟糕了,所以我将从这个例子开始:
我的数据库:
id -|- name ---|---start . - - -|---end . -- - - |-- description
0 --|-- task --|-- 2015-10-05 --|-- 2015-10-23 --|-- lorem ipsum
1 --|-- task --|-- 2015-09-22 --|-- 2015-09-28 --|-- lorem ipsum
2 --|-- task --|-- 2015-10-11 --|-- 2015-10-14 --|-- lorem ipsum
3 --|-- task --|-- 2015-10-02 --|-- 2015-10-17 --|-- lorem ipsum
我想仅从2015-10-08到2015-10-20选择正在进行的记录。
在这个例子中我需要id:0,2,3。我怎么能这样做?
提前感谢您的提示
答案 0 :(得分:0)
这应该可以找到重叠的日期范围;会话变量(@vars)是可选的,仅用于清晰。
SET @date0 := 20151008;
SET @dateN := 20151020;
SELECT *
FROM theTable
WHERE start BETWEEN @date0 AND @dateN
OR end BETWEEN @date0 AND @dateN
OR (start < @date0 AND end > @dateN)
;
我觉得这个(下面)在理论上应该起作用(而且速度更快),但我可以发誓我以前尝试过但它失败了(但是我本来可以试图找到比这更复杂的东西“重叠“):
SET @date0 := 20151008;
SET @dateN := 20151020;
SELECT *
FROM theTable
WHERE end >= @date0 AND start <= @dateN
;
编辑:哦,我刚注意到这个是昨天草莓建议的。
答案 1 :(得分:-1)
SELECT * FROM table_name WHERE start&gt; =&#39; 2015-10-08&#39; AND结束&lt; =&#39; 2015-10-20&#39;;