SQL中基于datediff和curdate函数计算列值

Posted

技术标签:

【中文标题】SQL中基于datediff和curdate函数计算列值【英文标题】:Calculating a column value based on datediff and curdate function in SQL 【发布时间】:2019-12-03 22:40:45 【问题描述】:

是否可以按如下方式计算以下字段:

如果 DateDiff 中有一个整数,则 LateFee 列将由 (DateDiff * 3) 填充 如果 DateDiff 中没有值,即租金仍未结清,则当前到期的 LateFee 计算公式为 (Date_Due - current date) * 3

我正在通过存储过程进行尝试:

delimiter $$
create procedure calcLateFees()
begin 
select Rental_ID as "Rental ID", Platform_ID as "Platform ID",Title_ID as "Title ID",Date_Due as "Due Date",
Date_Returned as "Returned On", Datediff(CURDATE(), Date_Due) * 3 as "Late Fee Outstanding"
from tp_rental
where month (curdate() = month(now()) and CURDATE() > Date_Due;
end $$

call calcLateFees();

我可能做错了,所以任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

【参考方案1】:

如果DayDiff 中有一个整数,那么LateFee 列将由(DayDiff * 3) 填充。如果DayDiff [...] 中没有值,则当前到期的LateFee(Date_Due - current date) * 3 计算

我会将其翻译为以下update 查询:

update tp_rental
set LateFee = case
    when DayDiff is not null then DayDiff * 3
    else datediff(date_due, curdate()) * 3
end

【讨论】:

以上是关于SQL中基于datediff和curdate函数计算列值的主要内容,如果未能解决你的问题,请参考以下文章

使用 DATEADD 从数据库中删除记录的 SQL 问题

什么是限制(参数数量的字节数/数计),以在MySQL中FIELD()函数?

轻松搭建基于 SpringBoot + Vue 的 Web 商城应用

DateDiff 和 Continuous 期间

sql Alter table:基于2列之间的datediff创建列

mysql 计算生日