DateTime查询搜索

时间:2017-08-27 05:33:43

标签: mysql sql date

我有一个示例数据库。

 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

我真的不知道预订搜索的逻辑对我有帮助。谢谢你们。

3 个答案:

答案 0 :(得分:2)

如果您想检查重叠间隔,那么就是这样:

SELECT Name, CheckIn, CheckOut
FROM mytable
WHERE CheckIn <= '2017-08-10' AND CheckOut >= '2017-08-08';

Demo here

为了更好地理解这一点,您可以根据预订间隔[2017-08-08, 2017-08-10]绘制描绘搜索间隔[CheckIn, CheckOut]的草图:

enter image description here

如果:

  • 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)

对于betweenstart列,endwhere条目中的check_incheck_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