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

Python+MYSQL休假管理系统日期比较判定错误问题求解

问题根因

你当前的错误源于将日期格式化为字符串后再做大小对比,字符串的比较逻辑是逐位比对ASCII值,不会按日期的时间先后计算:

  • 比如当前日期为25/09/2021、休假结束日期为09/10/2021时,逐位比对第一个字符,2的ASCII值大于0,就会错误判定25/09/2021 > 09/10/2021,返回Expired
  • 你用DATE_FORMAT的初衷是匹配前端日历选择器的录入格式,但日期对比必须统一转为日期类型计算,不能直接用字符串对比

修复方案

根据你的leave_end_date字段类型选择对应方案即可:

场景1:leave_end_date为DATE/DATETIME日期类型

直接去掉DATE_FORMAT用原生日期比较即可,修改后代码:

my_cursor.execute(''' UPDATE leaves
                        SET leave_status =
                           CASE
                              WHEN current_date() > leave_end_date THEN 'EXPIRED'
                              ELSE 'IN PROGRESS'
                        END
                                 ''')

日期类型的比较天然按时间先后计算,前端录入格式只影响写入数据库时的转换逻辑,写入后和录入/展示格式无关。

场景2:leave_end_date为VARCHAR字符串类型,存储格式为日/月/年

需要先把字符串类型的休假结束日期转成DATE类型再做比较,修改后代码:

my_cursor.execute(''' UPDATE leaves
                        SET leave_status =
                           CASE
                              WHEN current_date() > STR_TO_DATE(leave_end_date, '%d/%m/%Y') THEN 'EXPIRED'
                              ELSE 'IN PROGRESS'
                        END
                                 ''')

如果你存储的年份是2位简写格式,把格式符里的大写%Y改成小写%y即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:57:02