以分钟格式计算小数差

时间:2016-11-27 16:08:45

标签: sql oracle plsql

我有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之间的差异。

3 个答案:

答案 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