我有一个包含这些列的表:
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。
提前感谢。
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