8 часов 13 минут = 8,22 часа
Если вы просто хотите, чтобы число с частью единиц в качестве часов и дробной частью в минутах, вы можете взять дробную часть своего ответа и умножить ее0.6
:
Настройка Oracle :
CREATE TABLE XXBCT_BIO_OTL_ENTRIES_SUMMARY (
EMPLOYEE_NUMBER, ATTENDANCE_DT, SIGN_IN_TIME, SIGN_OUT_TIME
)
AS
SELECT '112319',
DATE '2019-01-04',
TO_CHAR( TIMESTAMP '2019-01-04 00:00:00', 'HH24:MI' ),
TO_CHAR( TIMESTAMP '2019-01-04 08:13:00', 'HH24:MI' )
FROM DUAL
Запрос :
SELECT ROUND( diff_hours, 2 ) AS diff_hours,
TRUNC( diff_hours ) + MOD( diff_hours, 1 ) * 0.60 AS diff_hours_hhmi
FROM (
SELECT 24 * (to_date(SIGN_OUT_TIME,'hh24:mi') - to_date(SIGN_IN_TIME,'hh24:mi'))
AS diff_hours
FROM XXBCT_BIO_OTL_ENTRIES_SUMMARY
WHERE EMPLOYEE_NUMBER = '112319'
AND attendance_dt = DATE '2019-01-04'
);
Вывод:
DIFF_HOURS | DIFF_HOURS_HHMI
---------: | --------------:
8.22 | 8.13
Вы также можете использовать INTERVAL
тип данных:
SELECT TO_TIMESTAMP(SIGN_OUT_TIME,'hh24:mi') - TO_TIMESTAMP(SIGN_IN_TIME,'hh24:mi') AS diff_hours_interval,
SUBSTR(TO_TIMESTAMP(SIGN_OUT_TIME,'hh24:mi') - TO_TIMESTAMP(SIGN_IN_TIME,'hh24:mi'), 12, 5 ) AS diff_hours_interval_string
FROM XXBCT_BIO_OTL_ENTRIES_SUMMARY
WHERE EMPLOYEE_NUMBER = '112319'
AND attendance_dt = DATE '2019-01-04';
DIFF_HOURS_INTERVAL | DIFF_HOURS_INTERVAL_STRING
:---------------------------- | :-------------------------
+000000000 08:13:00.000000000 | 08:13
db <> fiddle здесь