我有Time_In数字(7,2):= 12.40
和Time_Out数字(7,2):= 23.05
和Total_Hours数字(7,2)= Time_Out-Time_In
和结果将是Total_Hours = 10.65,应该是10.25
有人可以给我SQL查询来计算Time_in和Time_out之间的差异。
答案 0 :(得分:1)
这样的事情应该有效。它只是一个黑客;你可以做更好的事情来更改基表以存储DATE数据类型的时间。
这个想法是,当time_out上的分钟数小于time_in时,从time_out上的小时数中减去1并添加60分钟。这就像使用小数时减去0.4一样。所以这正是解决方案的作用。
所以,是的,这可以做到,而且很容易做 - 这是错误的做法。祝你好运!
with
inputs ( time_in, time_out ) as (
select 9.45, 12.06 from dual union all
select 10.20, 14.02 from dual
)
select time_in, time_out,
case when time_out - trunc(time_out) >= time_in - trunc(time_in)
then time_out - time_in
else time_out - time_in - 0.4 end as difference
from inputs;
TIME_IN TIME_OUT DIFFERENCE
9.45 12.06 2.21
10.2 14.32 4.12
答案 1 :(得分:1)
select time_out - time_in - case when mod(time_in,1) > mod(time_out,1) then 0.4 else 0 end
from t
答案 2 :(得分:0)
将小时数转换为小时数:
select (trunc(time_out) + (time_out - trunc(time_out)) / 60) +
trunc(time_in) + (time_in - trunc(time_in)) / 60)
) as diff_in_hours
. . .
您可以将此转换回您的奥术符号。这是一种方法:
select trunc(diff_in_hours) + (diff_in_hours - trunc(diff_in_hours) * 60 / 100
from (select (trunc(time_out) + (time_out - trunc(time_out)) / 60) +
trunc(time_in) + (time_in - trunc(time_in)) / 60)
) as diff_in_hours
. . .
) x