【问题标题】:Is there any better way i can update this records in "mysql database"有没有更好的方法可以更新“mysql 数据库”中的这些记录
【发布时间】:2021-09-15 18:08:08
【问题描述】:

拜托,我是 MYSQL 数据库和 Python 的新手。我创建了一个“休假管理系统”,它是一个使用 python、Tkinter 和 MYSQL 的桌面应用程序。我编写了一个 SQL 代码,将“当前日期”与“休假结束日期”进行比较。当然,只要“当前日期”大于“休假结束日期”,“休假状态”应更新为“已过期”,否则应更新为“进行中”。现在的问题是代码只能在当月工作。 示例:如果休假结束日期 = 25/09/2021,“休假状态”将更新为“进行中”,这是我期望的结果。但是如果休假结束日期 = 09/10/2021,休假状态更新为已过期,我观察到一旦“休假结束日期”月份大于“当前日期”月份,“休假状态”将更新为“过期”是错误的。下面是代码:

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

注意:请我使用日历选择器来输入日期,这就是我使用此 Date_format() 函数的原因。如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • leave_end_date是什么类型?

标签: python mysql


【解决方案1】:

您不能使用d/m/y 格式进行比较。它赋予月份中的日期最重要的意义,而不是年份和月份。

不格式化当前日期,而是将leave_end_date 的值解析为日期并进行比较。

CASE WHEN CURRENT_DATE() > STR_TO_DATE(leave_end_date, '%d/%m/%Y')

理想情况下,您不应该在数据库中存储格式化的日期,leave_end_date 的数据类型应该是 DATE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多