2017-07-18 69 views
0

我希望获得在时间和超时之间的总工作小时数。获取两个HH24:MI值之间的总小时数和分钟数

让说时间=上午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' 

但它抛出以下exeption:

ORA-00975:日期+日期不得00975. 00000 - “日期+日期不 允许“

我该怎么做?

请帮忙。

谢谢。

回答

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 
+0

我想要的确切输出为08:30 –

+0

@AlinaAnjum - 通过'||'运算符连接两个字段并不困难。 –

+0

好的谢谢。我已经完成了选择EXTRACT(HOUR FROM to_timestamp('17:30','hh24:mi') - to_timestamp('09:00','hh24:mi'))|| ':'|| EXTRACT(MINUTE FROM to_timestamp('17:30','hh24:mi') - to_timestamp('09:00','hh24:mi'))AS MN from dual –

0

,你需要通过TIMESTAMP

select 
    to_timestamp('17:30', 'hh24:mi') 
    - 
    to_timestamp('09:00', 'hh24:mi') 
from dual; 

做到这一点,它将返回 -

+00 08:30:00.000000 

如果你需要的细节,你可以提取像 -

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; 
+0

我怎么会只得到08:30? –

+0

@AlinaAnjum - 答案更新 –

相关问题