我有一个示例数据库。
Name CheckIn CheckOut
Jake 2017-08-02 00:00:00 2017-08-05 00:00:00
Rowan 2017-08-07 00:00:00 2017-08-11 00:00:00
Xander 2017-08-08 00:00:00 2017-08-10 00:00:00
Anna 2017-08-09 00:00:00 2017-08-15 00:00:00
Nat 2017-08-11 00:00:00 2017-08-14 00:00:00
例如,用户搜索 2017-08-08 的日期为 2017-08-10 。用户希望搜索日期 8,9 和 10 的所有数据。防爆。 Rowan选择7中的签入日期和10中的签出日期,因此rowan的日期为7, 8,9 10 和11.这是我想要的输出。
Name CheckIn CheckOut
Rowan 2017-08-07 00:00:00 2017-08-11 00:00:00
Anna 2017-08-09 00:00:00 2017-08-15 00:00:00
Xander 2017-08-08 00:00:00 2017-08-10 00:00:00
我真的不知道预订搜索的逻辑对我有帮助。谢谢你们。
答案 0 :(得分:2)
如果您想检查重叠间隔,那么就是这样:
SELECT Name, CheckIn, CheckOut
FROM mytable
WHERE CheckIn <= '2017-08-10' AND CheckOut >= '2017-08-08';
为了更好地理解这一点,您可以根据预订间隔[2017-08-08, 2017-08-10]
绘制描绘搜索间隔[CheckIn, CheckOut]
的草图:
如果:
CheckOut
&lt; &#39; 2017年8月8日&#39;然后保留间隔在搜索间隔之前
CheckIn
&gt; &#39; 2017-08-10`然后在因此,如果我们希望间隔重叠,则上述条件都不能成立。所以我们最终得到以下谓词:
`CheckOut` >= '2017-08-08' AND `CheckIn` <= '2017-08-10`
答案 1 :(得分:1)
试试这个:
SELECT * FROM test.TableName WHERE
(DATE(CheckIn) BETWEEN DATE('2017-08-08') AND DATE('2017-08-10') )
OR
(DATE(CheckOut) BETWEEN DATE('2017-08-08') AND DATE('2017-08-10') )
OR
(DATE('2017-08-08') BETWEEN DATE(CheckIn) AND DATE(CheckOut))
OR
(DATE('2017-08-10') BETWEEN DATE(CheckIn) AND DATE(CheckOut));
答案 2 :(得分:0)
对于between
和start
列,end
和where
条目中的check_in
和check_out
日期需要SELECT *
FROM table1
WHERE check_in BETWEEN '2017-08-07' AND '2017-08-10'
OR check_out BETWEEN '2017-08-07' AND '2017-08-10'
条件,如下所示。
name check_in check_out
-------------------------------------------------
Rowan 07.08.2017 00:00:00 11.08.2017 00:00:00
Xander 08.08.2017 00:00:00 10.08.2017 00:00:00
Anna 09.08.2017 00:00:00 15.08.2017 00:00:00
<强>结果强>
customer_id
您可以查看演示here