MySQL日期范围查询无法选中结束日期数据问题求助
解决MySQL查询无法选中结束日期当天数据的问题
嗨,这个问题我之前也碰到过,原因很简单——你大概率是把created_date定义成了datetime或者timestamp类型,对吧?当你写created_date <= '2018-04-09'时,MySQL会自动把这个日期转换成'2018-04-09 00:00:00',所以当天任何晚于零点的数据都会被过滤掉,这就是你看不到2018-04-09数据的原因。
给你几个靠谱的解决方案,按推荐程度排序:
方案一:使用小于第二天零点的条件(最推荐)
这种方法不会破坏字段上的索引,性能最优:SELECT * FROM ticket WHERE created_date >= '2018-04-07' AND created_date < '2018-04-10';逻辑很清晰:只要创建时间在2018-04-07零点及之后,并且在2018-04-10零点之前,就包含了2018-04-09全天的所有数据。
方案二:用DATE()函数转换字段
如果你觉得日期范围写起来更直观,可以把created_date转换成纯日期类型再比较:SELECT * FROM ticket WHERE DATE(created_date) BETWEEN '2018-04-07' AND '2018-04-09';但要注意:这个方法会让
created_date上的索引失效,如果你的ticket表数据量很大,查询速度会变慢,所以只适合小数据集使用。方案三:指定结束时间到当天23:59:59
这种方式也能解决问题,但有个小局限:SELECT * FROM ticket WHERE created_date >= '2018-04-07' AND created_date <= '2018-04-09 23:59:59';如果你的
created_date是支持毫秒的datetime(6)类型,那2018-04-09 23:59:59.123这样的数据还是会被漏掉,所以不如方案一稳妥。
内容的提问来源于stack exchange,提问作者Arslan Butt
相关产品推荐
相关产品推荐

