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

MySQL日期范围查询异常求助:如何正确筛选指定时段数据?

解决MySQL日期范围查询异常问题

问题根源

你使用的'dd-mm-yyyy'格式字符串和MySQL默认的日期解析格式('yyyy-mm-dd')不匹配,导致数据库把查询条件当成字符串比较而非日期比较,自然得不到预期结果。比如'12-03-2014'作为字符串的比较逻辑,和实际日期的比较逻辑完全不同。

正确解决方案

方式1:用MySQL标准日期格式直接查询

MySQL默认识别'yyyy-mm-dd'格式的日期字符串,直接按这个格式编写条件即可:

-- 查询2014年3月12日至2014年5月12日
SELECT * FROM test.table_1 WHERE date_ >= '2014-03-12' AND date_ <= '2014-05-12';

-- 你的示例需求:2022年8月14日至31日
SELECT * FROM test.table_1 WHERE date_ >= '2022-08-14' AND date_ <= '2022-08-31';

方式2:转换输入的dd-mm-yyyy格式为日期类型

如果只能提供dd-mm-yyyy格式的日期,使用STR_TO_DATE()函数把字符串转换成MySQL可识别的日期类型后再比较:

-- 查询2014年3月12日至2014年5月12日
SELECT * FROM test.table_1 
WHERE date_ >= STR_TO_DATE('12-03-2014', '%d-%m-%Y') 
  AND date_ <= STR_TO_DATE('12-05-2014', '%d-%m-%Y');

-- 你的示例需求:2022年8月14日至31日
SELECT * FROM test.table_1 
WHERE date_ >= STR_TO_DATE('14-08-2022', '%d-%m-%Y') 
  AND date_ <= STR_TO_DATE('31-08-2022', '%d-%m-%Y');

关键注意事项

  • 确认date_字段类型:如果它是VARCHAR等字符串类型,强烈建议修改为DATE或DATETIME类型。字符串存储日期不仅会导致查询逻辑混乱,还无法利用日期索引优化查询,10年的数据量下性能差异会很明显。
  • 若要修改字段类型,可执行以下语句(执行前务必备份数据,确保原字符串日期格式能被MySQL正确转换):
    ALTER TABLE test.table_1 MODIFY COLUMN date_ DATE;
    

内容的提问来源于stack exchange,提问作者Piyush Ghumelia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:49:56