Конвертирование строки с числом заданой длины в значение времени

Нужно конвертировать строку, в которой 4-х значные числа (например, '0625') в строку времени формата "часы:минуты" (то есть, '06:25' в данном случае).

В таблице есть строчные колонки:

  • TIME с 4-х значными числами
  • TIME2 куда нужно занести результат

Пробовал через функцию TO_DATE, но при следующий пример выдает неправильный результат:

UPDATE ATEST
SET TIME2 = TO_DATE("TIME", 'HH24:MI') 
WHERE ID > 0

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Yaroslav

Попробуйте так:

ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'HH24:MI:SS';

UPDATE ATEST
  SET time2 = TO_TIMESTAMP(time, 'HH24MI') 
  WHERE id > 0;

Результат:

введите сюда описание изображения

→ Ссылка
Автор решения: 0xdb

Для преобразования строчного значения в строчное надо воспользоваться функциями возвращающими строчное значение.

Несмотря на наличие ключевого слова время, использовать функции по работе со временем, например, to_timestamp или to_date, не следует. О возмоожных ошибках при неявном преобразовании типа данных date в строку посмотрите, например, здесь.

Попробовать результаты преобразования проще в анонимном блоке:

declare
    time constant varchar2 (4) := '0625';
    time2 varchar2 (24) := regexp_replace (time, '(\d{2})(\d{2})', '\1:\2');
begin
    dbms_output.put_line ('new time(old time)='||time2||'('||time||')');
end;

new time(old time)=06:25(0625)

→ Ссылка