Mysql日期范围从2开始

时间:2015-07-29 21:59:26

标签: mysql date select

我的英语太糟糕了,所以我将从这个例子开始:

我的数据库:

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。我怎么能这样做?

提前感谢您的提示

2 个答案:

答案 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;;