MariaDB触发器计算时差,以总小时数的十进制和十分之一小时的整数取整

问题描述 投票:0回答:1

我有一个包含这些列的表:

start_time datetime
end_time datetime
billable_time decimal(3,1)

billable_time列是在插入和更新时使用触发器计算的,以小时总数表示,小时数以十进制表示;但是,我希望它总是四舍五入而不是四舍五入到最接近的数字。创建触发器时,我无法弄清楚如何使其始终四舍五入。此触发器可以正确计算出它,但是如果它是最接近的数字,它会四舍五入:

SET new.billable_time = CAST(TIME_TO_SEC(TIMEDIFF(new.end_time, new.start_time))/3600 as decimal(3,1))

例如:

start time = 2020-06-01 11:00:00
end_time = 2020-06-01 12:22:08

结果在

billable_time = 1.4

但是如果总是四舍五入,则应该为1.5。

我尝试使用CEIL()CEILING()函数,但将它们四舍五入为最接近的整数,即2。

我似乎无法弄清楚如何使其按我的意愿去做。是否可以在触发器中执行此操作?任何帮助将不胜感激。该数据库是MariaDB v10.4.13。

提前感谢。

sql casting mariadb rounding database-trigger
1个回答
0
投票
SET new.billable_time = CAST( TIME_TO_SEC(TIMEDIFF(new.end_time, new.start_time))/3600 + 0.05 AS decimal(3,1) )

您也可以使用ceil():这个想法是先除以360而不是3600,然后以ceil()取整,最后除以10

SET new.billable_time = 
    CEIL(TIME_TO_SEC(TIMEDIFF(new.end_time, new.start_time))/360) / 10 
© www.soinside.com 2019 - 2024. All rights reserved.