Oracle не имеет TIME
тип данных - это имеет DATE
или TIMESTAMP
оба из которых имеют дату и временную составляющую.
SQL Fiddle
Oracle 11g R2 Настройка схемы:
CREATE TABLE times (time) AS
SELECT 9 FROM DUAL
UNION ALL SELECT 1.2 FROM DUAL
UNION ALL SELECT 15.53 FROM DUAL
UNION ALL SELECT 24.62 FROM DUAL;
Запрос 1 - Получить правильный компонент времени для чисел, которые являются допустимыми раз:
SELECT time,
TO_DATE(TO_CHAR(time, '00.00'), 'HH24.MI') AS parsed_time
FROM times
WHERE REGEXP_LIKE(TO_CHAR(time, '00.00'), '([01]\d|2[0-3]).[0-5]\d')
Results:
| TIME | PARSED_TIME |
|-------|-----------------------------|
| 9 | September, 01 2015 09:00:00 |
| 1.2 | September, 01 2015 01:20:00 |
| 15.53 | September, 01 2015 15:53:00 |
Запрос 2 - Получить правильный компонент времени для чисел, которые являются допустимыми раз с сегодняшнего дня:
SELECT time,
TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' ' || TO_CHAR(time, '00.00'), 'YYYY-MM-DD HH24.MI') AS parsed_time
FROM times
WHERE REGEXP_LIKE(TO_CHAR(time, '00.00'), '([01]\d|2[0-3]).[0-5]\d')
Results:
| TIME | PARSED_TIME |
|-------|-----------------------------|
| 9 | September, 28 2015 09:00:00 |
| 1.2 | September, 28 2015 01:20:00 |
| 15.53 | September, 28 2015 15:53:00 |
Запрос 3 - Получить правильный компонент времени для любого количества часов (единица часть) и минут (дробная часть):
SELECT time,
TRUNC(SYSDATE) + TRUNC(time)/24 + (time - TRUNC(time)) * 100/60/ 24 AS parsed_time
FROM times
Results:
| TIME | PARSED_TIME |
|-------|-----------------------------|
| 9 | September, 28 2015 09:00:00 |
| 1.2 | September, 28 2015 01:20:00 |
| 15.53 | September, 28 2015 15:53:00 |
| 24.62 | September, 29 2015 01:02:00 |
насчет 28,78? –
Я не думаю, что 'NUMERIC' будет хранить' 11: 53'. –
Oracle не имеет типа данных 'TIME' - он имеет« DATE »или« TIMESTAMP », оба из которых имеют дату и компонент времени. – MT0