Конвертирование строки с числом заданой длины в значение времени
Нужно конвертировать строку, в которой 4-х значные числа (например, '0625') в строку времени формата "часы:минуты" (то есть, '06:25' в данном случае).
В таблице есть строчные колонки:
TIMEс 4-х значными числамиTIME2куда нужно занести результат
Пробовал через функцию TO_DATE, но при следующий пример выдает неправильный результат:
UPDATE ATEST
SET TIME2 = TO_DATE("TIME", 'HH24:MI')
WHERE ID > 0
Ответы (2 шт):
Попробуйте так:
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'HH24:MI:SS';
UPDATE ATEST
SET time2 = TO_TIMESTAMP(time, 'HH24MI')
WHERE id > 0;
Результат:
Для преобразования строчного значения в строчное надо воспользоваться функциями возвращающими строчное значение.
Несмотря на наличие ключевого слова время, использовать функции по работе со временем, например, 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)

