mysql - 从数据库中检索两个日期之间的时间段内的数据

标签 mysql sql datetime mariadb

我有一个 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/

相关文章:

mysql - 多行转单行查询结果

datetime - Azure 表 'Merge' 不会替换传递值为 null 的字段(例如 :Nullable<Date> field) C#

php - "Get"函数不起作用,因为不是所有的连字符都应该被替换

mysql - 从 MySQL 中选择 N 个特定的表

MySQL时间日期查询问题

mysql - SQL根据ID查找两行之间的时间差

c# - 日期时间转换 添加 5 小时

mysql - pad() 选择显示 2 个字符

php - 在 codeigniter 中从数据库检索结果

mysql - 操作已完成,但有错误