我有一个包含以下列的表:
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。
提前谢谢。
1条答案
按热度按时间ggazkfy81#
一个简单的解决方法是在前面的值的基础上加上十分之一秒的一半
cast
使用它:你也可以使用
ceil()
:首先用360
而不是3600
,然后用ceil()
,最后除以10
: