Mysql 在两个日期之间的时间段内从数据库检索数据
我有一个HTML表格,其中显示从设备实时接收的记录 我希望允许用户从两个日期之间的时间间隔获取数据,例如,在晚上22:00:00到次日06:00:00检索“2019-09-20”和“2019-09-25”之间的所有数据,其中所有数据都存储在UTC上 我可以让它从UTC 06:00:00到UTC 08:00:00运行,检索许多结果,但对于此查询,从UTC 22:12:00到UTC 08:00:00不可用 此查询返回以下结果:Mysql 在两个日期之间的时间段内从数据库检索数据,mysql,sql,datetime,mariadb,Mysql,Sql,Datetime,Mariadb,我有一个HTML表格,其中显示从设备实时接收的记录 我希望允许用户从两个日期之间的时间间隔获取数据,例如,在晚上22:00:00到次日06:00:00检索“2019-09-20”和“2019-09-25”之间的所有数据,其中所有数据都存储在UTC上 我可以让它从UTC 06:00:00到UTC 08:00:00运行,检索许多结果,但对于此查询,从UTC 22:12:00到UTC 08:00:00不可用 此查询返回以下结果: SELECT d0_.id AS id_0 , d0_.uui
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之间的结果:
选择d0.id作为id\u 0,d0.uuid作为uuid\u 1,d0.datetime\u utc作为datetime\u utc\u 2,d0.macaddress作为macaddress\u 3,d0.channel\u name作为channel\u name\u 5,d0.device\u id作为device\u id\u 42,d0.country\u id作为country\u id\u 43
从检测d0_
d0上的内部连接设备d4。设备id=d4。id
d0上的内部联接国家/地区c7\uID=c7\uID
其中日期0.日期时间0 utc介于“2019-09-20”和“2019-09-25”之间
“22:00:00”和“08:00:00”之间的时间0.datetime\utc
按d0\日期时间\ 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)."
谢谢
Joaquin.测试两个时间间隔,一个从00:00:00到08:00:00,另一个从22:00:00到23:59:59
我不确定是否有分辨率大于1秒的时间数据。如果您这样做,您可能需要执行类似23:59:59.999的操作。和TIMEd0.datetime\u utc在'22:00:00'和'23:59:59'之间或TIMEd0.datetime\u utc在'00:00:00'和'08:00:00'之间应该可以。谢谢,它在某些情况下可能有效,但可能会导致一些问题。例如,如果datetime==UTC+2的用户从9月1日凌晨1:00:00开始筛选,则数据库中存储的符合此条件的日期为8月31日23:00:00。如果用户也从9月1日开始按日期进行筛选,则此结果将被排除在结果之外。我只是试图为初始给定条件提供一个解决方案。如果你处理的是时区的变化,任何解决方案显然都会更加复杂。但基本原则是一样的——将任何跨越午夜的时间跨度分成两个跨度。这一点,您需要明确每个跨度被视为属于日期范围内的哪个日期,例如,假设跨度为21:00-1:00,21:00在周五,那么接下来的0:30是属于周六还是属于周五的伪延长部分?