Вашего образца ожидаемый результат неверен с учетом ваших же данные. Это должно быть 2015-03-19 07:28:57
. Что-то вроде ниже может работать для вас:
WITH d1 AS (
SELECT timestamp'2015-03-24 13:05:22' AS mydate
, '125:36.25' AS mytime FROM dual
)
SELECT mydate - NUMTODSINTERVAL(TO_NUMBER(SUBSTR(mytime, 1, INSTR(mytime, ':') - 1))*3600
+ TO_NUMBER(SUBSTR(mytime, INSTR(mytime, ':') + 1, 2))*60
+ TO_NUMBER(SUBSTR(mytime, INSTR(mytime, '.') + 1, 2)), 'SECOND')
FROM d1;
Что я делаю в приведенном выше запросе является преобразование элемента «время» в секундах, а затем к INTERVAL
значения вычесть из значения даты/времени.
В качестве стороннего варианта было бы лучше, если бы колонка времени была INTERVAL DAY TO SECOND
вместо VARCHAR2
. Затем его можно использовать непосредственно в арифметике даты/времени без необходимости просканировать любые обручи.
Каков тип данных двух столбцов? –
20150324 13:05:22 (DATE) 125: 36.25 (VARCHAR2) – homer