MariaDB 触发器计算时差作为总小时数的小数和小时的十分之一总是四舍五入
MariaDB Trigger Calculating Time Difference as a decimal of total hours and tenth of hour always rounding up
我有一个 table 包含这些列:
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.
提前致谢。
一个简单的解决方案是在 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
我有一个 table 包含这些列:
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.
提前致谢。
一个简单的解决方案是在 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