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

MySQL中dd-mm-yy格式日期存储导致无法查询指定日期前数据的问题

问题解决:MySQL中筛选非标准格式日期的记录

嘿,我来帮你搞定这个日期查询的问题~你的查询没返回结果,主要是犯了两个关键错误:

原查询的问题分析

  • 字符串比较逻辑错误:你用date_format()把日期转成字符串后再比较,但字符串是按字典序逐位对比的,和日期的时间顺序逻辑完全不一样。比如'13-09-17'和'20-09-2017',字符串长度都不同,根本没法正确判断日期先后。
  • 参数处理错误:date_format(20-09-17,'%d-%m-%Y')里的20-09-17会被MySQL当成数学运算(20-9-17=-6),date_format处理这个数值完全得不到你想要的20-09-2017日期,这就导致你的比较基准完全错了。

正确的查询语句

你需要把存储的非标准日期字符串转换成MySQL能识别的DATE类型,再和标准格式的目标日期比较,用STR_TO_DATE()函数就能做到:

SELECT * FROM `invoices` WHERE STR_TO_DATE(invoicedate, '%d-%m-%y') < '2017-09-20';

语句解释

  • STR_TO_DATE(invoicedate, '%d-%m-%y'):把invoicedate字段里的dd-mm-yy格式字符串转换成MySQL标准的YYYY-MM-DD日期类型,比如'13-09-17'会被转换成2017-09-13。
  • 直接和'2017-09-20'比较:MySQL会按日期的时间顺序来判断大小,这样就能正确筛选出所有早于2017年9月20日的记录,自然也包含13-09-17的行。

额外建议

如果你的业务允许,最好把invoicedate字段的类型改成DATE,这样后续查询不用每次都做格式转换,性能更好,也能避免类似的格式问题。

内容的提问来源于stack exchange,提问作者Sugumar Venkatesan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:02:31