Oracle: преобразовать дату и время в определенный формат

Добрый день, всемогущий Stackoverflow!

Я не слишком хорошо знаком с SQL в Oracle, но мне нужно взять значение даты/времени и преобразовать его в строку, которая соответствует определенному формату для другого приложения. Я нашел много похожих сценариев, но смешанные с некоторой документацией Oracle еще не привели меня к тому, что мне нужно.

Формат ввода следующий: 06.08.2014 15:05:21

Формат, который мне нужно ввести в другое приложение, выглядит следующим образом: ГГГГММДДччммссуу

uu - это микросекунды (я думаю, дробные секунды в Oracle).

Я думал, что это сработает:

to_date(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT,'YYYYMMDDHH24MISSFF') 

Я думаю, что это работает только в том случае, если формат ввода соответствует формату вывода.

Если вы можете оказать помощь, я был бы очень признателен!


person billhubb84    schedule 21.08.2014    source источник
comment
Проверьте эту ссылку: stackoverflow.com /вопросы/1758219/. Я думаю, это может быть полезно   -  person Aramillo    schedule 22.08.2014


Ответы (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 (выходной формат)

person Rimas    schedule 21.08.2014
comment
Большое спасибо, помогает мне лучше понять, с чем я работаю. Похоже, что в этой базе данных нет дробных секунд, и время на самом деле не было 24 часа, поэтому внесли два незначительных изменения в первое решение, и оно сработало отлично. Большое спасибо за быстрый и лаконичный ответ! - person billhubb84; 22.08.2014

выберите to_char(systimestamp,'yyyymmddhh24missFF') из двойного;

person JM_developer    schedule 21.08.2014

Нужная вам функция Oracle — TO_CHAR.

to_char(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT,'ГГГГММДДЧЧ24MISSFF')

person Tim Boyer    schedule 21.08.2014

поскольку ваш формат ищет строковую переменную, я не уверен, будет ли она принимать to_date.

Я бы посоветовал поэкспериментировать с комбинацией функций to_char() и to_date().

to_char(to_date(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT,'DD/MM/YYYY HH:MM:SS),'YYYYMMDDHH24MISSFF')

or

to_date(to_char(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT,'YYYYMMDDHH24MISSFF'),''DD/MM/YYYY HH:MM:SS')

функции, которые я бы попробовал. Oracle может быть очень разборчивым в отношении входных данных с датами/строками, я также относительно новичок в Oracle, и время/даты часто разочаровывают.

person Taku_    schedule 21.08.2014