我希望在时间和时间之间得到总工时数。
请说时间=上午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 - "日期+日期不是 允许"
我该怎么做?
请帮助。
感谢。
答案 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;