изменить формат даты с char - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть следующие форматы в поле indicator_date. Поле indicator_date является типом данных char. Есть ли способ отобразить их стандартизированными в формате mm/dd/yyyy при запросе этого столбца? Пользователям разрешается вручную вводить дату, но они не могут ее изменить. Благодарю.

Пример отображения даты:

5/2/2018
,5/21/2018
,01/29/2018

Я пытался to_date(INDICATOR_DATE,'mm/dd/yyyy'), но он возвращает ошибку.

ORA-01830: изображение в формате даты заканчивается перед преобразованием всего ввода строка

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Для недопустимых дат (год 20118) невозможно написать хорошее выражение для преобразования ... но для остальных подход может быть:

  with dats as (
             select '5/2/2018' dt from dual
  union all select '5/21/2018' dt from dual
  union all select '01/29/2018' dt from dual
  union all select '2018-01-13' dt from dual
  union all select '8/17/20118' dt from dual
  union all select '23018' dt from dual
  )
  select dt
  , to_char(
     case when regexp_like(dt,'(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[0-2])/([12][0-9]{3,3})$') then to_date(dt,'DD/MM/YYYY') 
         when regexp_like(dt,'((0?[1-9]|1[0-2])/0?[1-9]|[12][0-9]|3[01])/([12][0-9]{3,3})$') then to_date(dt,'MM/DD/YYYY') 
         when regexp_like(dt,'([12][0-9]{3,3})-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01])$') then to_date(dt,'YYYY-MM-DD') 
  --       when regexp_like(dt,'^(0?[1-9]|1[0-2])(0?[1-9]|[12][0-9]|3[01])(([12][0-9])?[0-9]{2,2})$') then to_date(regexp_replace(dt,'^(0?[1-9]|1[0-2])(0?[1-9]|[12][0-9]|3[01])(([12][0-9])?[0-9]{2,2})$','\1/\2/\3') ,'MM/DD/YYYY') 
  else null end   
   , 'MM/DD/YYYY' ) dtconv 
  from dats
  ;

Проблема с 23018 состояла в том, что 22818 будет работать, но 30 февраля 2018 года не существует.

0 голосов
/ 05 сентября 2018

Вы ищете to_char() и to_date()?

select to_char(to_date('5/2/2018', 'MM/DD/YYYY'), 'MM/DD/YYYY')
from dual
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...