sql - 显示给定日期(date_start 和 date_end)的天数跨度,如果 end_date 超过则应用惩罚

sql - display the span of days given dates(date_start and date_end), if the end_date is over the penalty is applied

帮我修改代码。 这是我的 sql 代码:

    SELECT lt.loan_amount, lt.rel_date, lt.due_date,
    DATEDIFF( lt.rel_date, lt.due_date ) AS span, 
    (((DATEDIFF( lt.due_date, lt.rel_date )) + curdate()) * 0.02) AS penalty
    FROM loan_transaction lt, members m
    WHERE lt.MID = m.MID

但输出一团糟。我只是想说,当 due_date 结束时,将适用 0.02 罚分。

    (((DATEDIFF( lt.due_date, lt.rel_date )) + curdate()) * 0.02) AS penalty..

我将如何在 php mysql 中显示此内容? 我对此很陌生。我实际上正在为此苦苦挣扎。 请帮助。谢谢

我不确定你到底喜欢多惩罚,比如每天一次还是一次,但你可以使用 IF

SELECT lt.loan_amount, lt.rel_date, lt.due_date,
    DATEDIFF( lt.rel_date, lt.due_date ) AS span, 
    IF(DATEDIFF(lt.due_date, lt.rel_date) > 0, 0.02, 0) AS penalty
    FROM loan_transaction lt, members m
    WHERE lt.MID = m.MID

这是考虑到您正在尝试将 due_date 与 rel_date 进行比较以考虑惩罚。如果 due_date 大于 rel_date,这将 return 惩罚为 0.02。

如果要与今天的日期进行比较,可以使用

IF(DATEDIFF(CURDATE(), lt.due_date) > 0, 0.02, 0) AS penalty

如果今天的日期大于 due_date,这将 return 惩罚为 0.02。

编辑:要在 due_date 之后的每一天应用 0.02 的罚款,您应该使用以下内容:

IF(DATEDIFF(CURDATE(), lt.due_date) > 0, DATEDIFF(CURDATE(), lt.due_date)*0.02, 0) AS penalty