MySQL:在开始和结束时间之间记录TIME(' xx:yy:zz')

时间:2016-11-20 12:36:20

标签: php mysql

这是表格:

+----+-----------+------------+----------+
| id | id_sensor | start_time | end_time |
+----+-----------+------------+----------+
|  1 |        12 | 21:15:00   | 02:45:00 |
|  2 |         7 | 00:00:00   | 23:15:00 |
|  3 |         5 | 04:30:00   | 16:30:00 |
+----+-----------+------------+----------+

我需要获取PHP传递的特定时间(例如01:00:00)之间的记录。 start_time和end_time是UTC中的TIME字段,我通过php传递到查询小时,注意,在php中从user_timezone转换为UTC。

SELECT * FROM test WHERE TIME('01:00:00') BETWEEN start_time AND end_time;

查询只返回记录ID 2,而不是1.我需要两者,在这种情况下(对于id 1,结束时间是第二天)。

当然,如果我们寻找TIME(' 00:00:00'),我们需要ID 3.

谢谢。

2 个答案:

答案 0 :(得分:1)

我认为这是你想要的逻辑:

SELECT *
FROM test
WHERE (start_time < end_time AND TIME('01:00:00') BETWEEN start_time AND end_time) OR
      (start_time > end_time AND TIME('01:00:00') NOT BETWEEN end_time AND start_time);

答案 1 :(得分:-1)

now()返回当前时间和日期。您也可以使用curtime(),它只返回当前时间。

顺便说一句,我认为应该避免使用SELECT *(也许你只是为了这个例子而使用它),恕我直言最好列出所需的字段。