获取两个HH24:MI值之间的总小时数和分钟数

时间:2017-07-18 06:53:28

标签: sql oracle

我希望在时间和时间之间得到总工时数。

请说时间=上午9点。

和超时=下午17:30。

然后查询应该返回8:30,即8小时30分钟。

我尝试过以下方法:

 select (to_date('1730','HH24:MI') + to_date('0900','HH24:MI'))
 from olphrm.emp_attendance where emp_code=123 and time='05-DEC-16'

但它会抛出以下例外:

  

ORA-00975:日期+日期不允许00975. 00000 - "日期+日期不是   允许"

我该怎么做?

请帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

使用提取功能:

SQL> select EXTRACT (HOUR FROM to_timestamp('17:30', 'hh24:mi') - to_timestamp('09:00', 'hh24:mi')) AS HR,
      2         EXTRACT (MINUTE FROM to_timestamp('17:30', 'hh24:mi') - to_timestamp('09:00', 'hh24:mi')) AS MN
      3   from dual;

输出

        HR         MN
---------- ----------
         8         30

答案 1 :(得分:0)

您需要通过TIMESTAMP

执行此操作
select 
     to_timestamp('17:30', 'hh24:mi') 
     - 
     to_timestamp('09:00', 'hh24:mi') 
 from dual;

它将返回 -

+00 08:30:00.000000

如果您需要细节,可以像< - / p>一样提取

WITH data AS
    (SELECT to_timestamp('17:30', 'hh24:mi') - to_timestamp('09:00', 'hh24:mi') remaining
    FROM dual
    )
SELECT LPAD(EXTRACT(HOUR FROM data.remaining),2,0) hours,
    LPAD(EXTRACT(MINUTE FROM data.remaining ), 2, 0) minutes
FROM data;