mariadb触发器将时差计算为总小时数的小数点和小时数的十分之一,并始终四舍五入

6fe3ivhb  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(424)

我有一个包含以下列的表:

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。
提前谢谢。

ggazkfy8

ggazkfy81#

一个简单的解决方法是在前面的值的基础上加上十分之一秒的一半 cast 使用它:

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

相关问题