这是表格:
+----+-----------+------------+----------+
| 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.
谢谢。
答案 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 *(也许你只是为了这个例子而使用它),恕我直言最好列出所需的字段。