弹窗列表-时间筛选bug
弹窗信息表,存储弹窗信息。有两个字段,存储开始时间和结束时间
1 create table notification(id int, start_tm datetime, end_tm datetime)
弹窗查询页面,有根据开始日期和结束日期筛选功能。传给后端的是日期date类型字符串如:"2025-12-01",fastapi框架自动转为date类型。展示数据库提示时间区间,查询区间有交集,展示出来。
查询筛选条件用的,取反。没有交集,然后取反,就是有交集。前端传的日期start_dt, end_dt。查询sql
select * from notification where not (start_tm > end_dt or end_tm < start_dt)
问题现象,提示时间开始时间、结束时间在同一天的。2025-12-01 00:000:00 ~ 2025-12-01 08:000:00 ,2025-12-02 08:000:00 ~ 2025-12-02 09:000:00。筛选条件start_dt和end_dt是同一天,只有1号可以查询到,2号查询不到。
原因分析:
date类型转datetime类型,时分秒,都会为00:00:00。导致,起止时间在同一天的,只有包含00:00:00的,才能筛选出来。
我当时想到的两个方案
解决方案:
1. 前端查时分秒给后端
2. sql做一下类型转换,datetime转成date类型
这两个方案,领导都觉得不好,同时要注意是否走了索引。
第一个方案:用户体验变差了,需要精确到时分秒
第二个方案:查询效率低,所有数据都要datetime转成date类型
领导给的方案,后端收到前端传的date后,后台代码转成datetime。转成00:00:00 ~ 23:59:59。
1. 前端不用修改,用户体验较好
2. 效率比较高
灰度发布后发现的,测试的时候要注意边界条件,提前发现问题。