You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:40:55