Преобразование до настоящего времени с несколькими возможными масками в Oracle

StackOverflow https://stackoverflow.com/questions/1928317

  •  20-09-2019
  •  | 
  •  

Вопрос

Так получилось, что я должен получить дату из столбца varchar2 в Oracle, но это непоследовательно в форматировании. Некоторые поля могут иметь «2009.12.31», другие '2009/12/32 00:00:00'. Есть ли какая -либо стандартная конструкция, которую я мог бы использовать, так что мне не нужно проходить

begin
  to_date(date, mask1)
exception
  begin
    to_date(date,mask2)
  exception
    ..
  end
end

блоки или анализ строки предыдущей даты, чтобы определить правильную маску? Что-то типа to_date(date, mask1,mask2,..) ?

Это было полезно?

Решение

Нет, но некоторые форматы даты Oracle являются «прощающими» различий, например,

SQL> select to_date('2009.12.31','YYYY/MM/DD') from dual;

TO_DATE('20
-----------
31-DEC-2009

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

Другие советы

Вам нужно перечислить все возможные форматы, которые вы хотите поддержать-помните, что некоторые неоднозначны (например, «10-11-2009» 10 ноября или 11 октября?), Чтобы ваш код должен был бы отдать предпочтение одному над другому.

Как сказал Тони, некоторые форматы будут принимать различные входные данные, в основном в отношении анализа символов сепаратора и отсутствующих битов (например, Dd-Mon-Yyyy HH24: MI: SS 'будет соответствовать 31-DEC-2009 10:30 : 00 ', '31/dec/2009 10:30', '31 декабря 2009 г.).

Помимо этих упрощений, вам понадобится серия исключений Begin (Format1), когда другие начинают (формат2) исключение, когда другие начинают ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top