Oracle: конвертировать дату и время в определенный формат
Добрый день всемогущий Stackru!
Я не слишком знаком с SQL в Oracle, но мне нужно взять значение даты / времени и преобразовать его в строку, соответствующую определенному формату для другого приложения. Я нашел много похожих сценариев, но те, которые смешаны с некоторой документацией Oracle, еще не дали мне того, что мне нужно.
Формат ввода выглядит следующим образом: 06.08.2014 15:05:21
Формат, который мне нужно ввести в другое приложение, выглядит следующим образом: ГГГГММДДччммссуу
uu - микросекунды (я полагаю, доли секунды в Oracle).
Я думал, что это сработает:
to_date(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT,'YYYYMMDDHH24MISSFF')
Я думаю, что это работает, только если формат ввода соответствует формату вывода.
Если вы можете оказать помощь, я был бы очень признателен!
4 ответа
Если вы конвертируете из типа DATE в формат вывода, используйте TO_CHAR
функция:
TO_CHAR(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT,'YYYYMMDDHH24MISSFF')
Если вы конвертируете из типа VARCHAR2, используйте обе функции:
TO_CHAR(TO_DATE(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT, 'MM/DD/YYYY HH:MI:SS'),'YYYYMMDDHH24MISSFF')
TO_DATE
- конвертирует из типа VARCHAR2 (формат ввода) в тип DATE; TO_CHAR
- от типа DATE к типу VARCHAR2 (выходной формат)
Так как ваш формат ищет строковую переменную, я не уверен, будет ли она принимать to_date.
Мой совет - экспериментировать с сочетанием функций to_char() и to_date().
to_char(to_date(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT,'DD/MM/YYYY HH:MM:SS),'YYYYMMDDHH24MISSFF')
или же
to_date(to_char(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT,'YYYYMMDDHH24MISSFF'),''DD/MM/YYYY HH:MM:SS')
это функции, которые я бы попробовал. Oracle может быть очень разборчивым в отношении входных данных с датами / строками, я также относительно новичок в Oracle, и времена / даты часто расстраивают
Вам нужна функция Oracle - TO_CHAR.
to_char (VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT, 'YYYYMMDDHH24MISSFF')
Выберите to_char(systimestamp,'yyyymmddhh24missFF') из двойного;