记一波sql由于精确时间导致的查询坑

背景: 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’

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值