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

