Oracle SQL — использование TO_DATE для добавления секунды ко времени, извлеченному из строки

Это основано на вопросе, который я задал вчера from-a-text-field">Ссылка

Я беру время из столбца «Полет», данные которого выглядят так:

Dayton 01:23:59

Что дает мне это:

01:23:59

Затем я хочу добавить 1 секунду к этому. Я использую следующую функцию TO_DATE:

to_date(substr(Flight,length(Flight)-8,8), HH:MI:SS') + interval '1' second

Это работает, но формат включает дату:

2018-07-01T01:24:00.000+00:00

Мне нужно, чтобы это выглядело так:

01:24:00

Я пытался использовать SUBSTR для извлечения только времени безрезультатно. Любые идеи о том, как я могу добавить 1 секунду к вышеизложенному и сохранить формат HH24: MI: SS?


person Dan    schedule 26.07.2018    source источник
comment
Используйте to_char(), чтобы преобразовать его обратно в строку.   -  person Gordon Linoff    schedule 26.07.2018
comment
@GordonLinoff, это сработало. благодаря.   -  person Dan    schedule 26.07.2018


Ответы (1)


Прямой способ - использовать функцию преобразования строки to_char с шаблоном HH24:MI:SS как

with t(myTime) as
(
 select to_date(substr('Dayton 01:23:59',length('Dayton 01:23:59')-8,9), 'HH:MI:SS') 
            + interval '1' second
   from dual
)
select to_char(myTime, 'hh24:mi:ss') as myTime_Chr from t;

MYDATE_CHR
01:24:00

или, альтернативно, функция regexp_replace может использоваться как (при условии, что название города не содержит цифр):

select regexp_replace('Dayton 01:24:00','[^0-9:]') as myTime 
  from dual;

MYTIME
01:24:00

P.S. dual может быть заменено вашим настоящим именем таблицы.

Но лучше разделить этот столбец на два отдельных столбца: город и время.

Демонстрация скрипта SQL

person Barbaros Özhan    schedule 26.07.2018