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
相关产品推荐
相关产品推荐

