2017-07-18 68 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 - 答案更新 –

相關問題