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

如何在MySQL5中删除日期早于今日的行?日期格式为dd/mm/yyyy

解决MySQL中dd/mm/yyyy格式日期的删除问题

你遇到的问题核心在于你的date列存储的是字符串(而非MySQL原生的DATE/DATETIME类型),MySQL直接比较字符串时是按字符顺序逐位对比的,这就导致了逻辑错误:比如'26/06/2017'和'31/05/2018',第一个字符'2'小于'3',MySQL会错误判定前者更小,从而误删2018年的数据。

正确的删除操作步骤

1. 先验证要删除的行(关键!避免误删)

在执行DELETE之前,一定要先用SELECT确认哪些行符合条件,避免误删数据:

SELECT * FROM your_table_name WHERE STR_TO_DATE(date, '%d/%m/%Y') < CURDATE();

这里的STR_TO_DATE()函数会把你的dd/mm/yyyy格式字符串转换成MySQL能识别的日期类型,CURDATE()会返回当前系统日期(格式为YYYY-MM-DD)。

2. 执行删除操作

确认结果正确后,再执行删除:

DELETE FROM your_table_name WHERE STR_TO_DATE(date, '%d/%m/%Y') < CURDATE();

如果是要和指定日期(比如'26/06/2017')对比,同样需要转换格式,两种写法都可以:

-- 写法1:直接使用MySQL标准日期格式
DELETE FROM your_table_name WHERE STR_TO_DATE(date, '%d/%m/%Y') < '2017-06-26';

-- 写法2:用STR_TO_DATE转换指定日期字符串
DELETE FROM your_table_name WHERE STR_TO_DATE(date, '%d/%m/%Y') < STR_TO_DATE('26/06/2017', '%d/%m/%Y');

长期解决方案:修改列类型为DATE

为了避免以后再遇到这类问题,建议把date列改成MySQL原生的DATE类型,从根源上解决格式兼容问题:

  1. 先更新现有数据,把字符串转成DATE格式:
UPDATE your_table_name SET date = STR_TO_DATE(date, '%d/%m/%Y');
  1. 修改列类型:
ALTER TABLE your_table_name MODIFY COLUMN date DATE;

这样之后你就可以直接用日期比较,不用每次都转换了,比如:

DELETE FROM your_table_name WHERE date < CURDATE();

注意:执行任何修改或删除操作前,最好备份一下你的数据,防止意外!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:35:45