背景: 1.mysql 版本8.0
2.存储时间的格式为datetime(精确到秒级)
在近日的开发中,遇到了一个问题,如果查询的时候使用的时间精度是用精确到毫秒级的,举例’2021-04-30 23:59:59.99999’
那么在查询时间范围为大于等于‘2021-04-01 00:00:00’—小于等于’2021-04-30 23:59:59.99999’在内的数据时会出现把时间为‘2021-05-01 00:00:00’的数据也都统计其中
(中间本来有图,涉及些数据问题就不展示了,大家意念理解一下)
经过对比后发现,如果不使用小于等于号,而直接使用小于号的查询是正确的
总结:
推断应该是数据库在查询小于等于23:59:59.99999的时候
由于数据库里存储关于时间的格式是datetime,所以会出现一定的偏差将30号的59.9999999约等于1号的00:00:00.00 造成最终查出的数据与预想并不一致
所以当要将查询精确至毫秒级的时候,数据库内的关于时间的格式也要应当进行对应的配置,防止再出现这种问题
至于这次遇到问题,选择的解决方案是将查询的条件改为与数据库一致的条件,也就是精确到秒级,示例’2020-04-30 23:59:59’