我有一个 HTML 表格,其中显示从设备实时接收的记录。
我想让用户获取2个日期之间的时间间隔的数据,例如,检索“2019-09-20”和“2019-09-25”夜间(从22日开始)之间的所有数据: 00:00 至次日 06:00:00),所有数据均以 UTC 存储。
我能够让它从 06:00:00 UTC 到 08:00:00 UTC 运行,检索许多结果,但不适用于此查询(22:12:00 UTC 到 08:00:00 UTC)。
此查询返回结果:
SELECT d0_.id AS id_0
, d0_.uuid AS uuid_1
, d0_.datetime_utc AS datetime_utc_2
, d0_.macaddress AS macaddress_3
, d0_.channel_name AS channel_name_5
, d0_.device_id AS device_id_42
, d0_.country_id AS country_id_43
FROM detection d0_
JOIN device d4_
ON d0_.device_id = d4_.id
JOIN country c7_
ON d0_.country_id = c7_.id
WHERE (DATE(d0_.datetime_utc) BETWEEN '2019-09-20' AND '2019-09-25')
AND (TIME(d0_.datetime_utc) BETWEEN '06:00:00' AND '08:00:00')
ORDER
BY d0_.datetime_utc ASC;
这是MySQL Workbench返回的结果日志:
1000 row(s) returned
现在,如果我运行查询来获取相同日期间隔之间以及 (22:00:00 UTC) 到 (08:00:00 UTC) 之间的结果:
SELECT d0_.id AS id_0, d0_.uuid AS uuid_1, d0_.datetime_utc AS datetime_utc_2, d0_.macaddress AS macaddress_3, d0_.channel_name AS channel_name_5, d0_.device_id AS device_id_42, d0_.country_id AS country_id_43
FROM detection d0_
INNER JOIN device d4_ ON d0_.device_id = d4_.id
INNER JOIN country c7_ ON d0_.country_id = c7_.id
WHERE (DATE(d0_.datetime_utc) BETWEEN '2019-09-20' AND '2019-09-25')
AND (TIME(d0_.datetime_utc) BETWEEN '22:00:00' AND '08:00:00')
ORDER BY d0_.datetime_utc ASC;
查询返回此结果(尽管时间间隔比第一个大):
0 row(s) returned
我认为这是因为开始时间大于结束时间造成的,但我不知道如何解决。
为了明确问题,查询描述如下:
"Give me all the records received all the days at night (defined by the TIME sentence) between 2 specific dates (defined by DATE sentence)."
谢谢
华金。
最佳答案
测试两个时间间隔,一个从 00:00:00 到 08:00:00,另一个从 22:00:00 到 23:59:59。
我不确定您是否有分辨率大于一秒的时间数据。如果这样做,您可能必须执行类似 23:59:59.999 的操作。
关于mysql - 从数据库中检索两个日期之间的时间段内的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58118929/