项目过程中遇到一个问题,做一个记录。
需求是需要按照时间筛选询价单,起初没有多想,就按照常规的思路去写。
<if test="betweenBeginDay != null and betweenEndDay != null">
and e.created_at BETWEEN #{betweenBeginDay} AND #{betweenEndDay}
但是这样会有一个问题,就是如果你传入的时间是 2019-09-05,mysql 会将时间匹配成 2019-09-05-00:00:00。这样的话,我想查 2019-09-04 到 2019-09-05 这个时间段内的时间就会发现,9 月 5 日这天是数据是查不到的。再比如 2019-09-05 到 2019-09-05 的数据是没有的。
因此在写查询语句的时候,需要把技术日期加一。
<if test="betweenBeginDay != null and betweenEndDay != null">
and e.created_at BETWEEN #{betweenBeginDay} AND date_add(#{betweenEndDay}, INTERVAL 1 day)
这样就可以正确查出结果。