Как отформатировать только те записи, для которых не кидается ora-01843?

У меня есть столбец с приведенными ниже примерами данных. Тип данных столбца - VARCHAR2..

050211
042911
110428
110428
AO0102
JAN 31
FEB 01

Когда я пытаюсь отформатировать записи столбцов в удобочитаемом формате с помощью приведенного ниже кода, я получаю

ORA-01843 : Not a valid month 

SELECT to_char(to_date(TRIM(MyColumn), 'YYMMDD'), 'MM/DD/YYYY') FROM MyTable;

Я считаю, что ORA-01843 выброшен из-за записей AO0102, 31 января, 01 февраля.

Как я могу игнорировать те записи (и, возможно, просто отображать их исходное значение), которые генерируют ORA-01843 и форматируют только те записи, которые могут быть отформатированы с помощью простого оператора выбора SQL?

Вы можете сослаться на мой ответ здесь: stackoverflow.com/questions/49402344/…

Kaushik Nayak 11.04.2018 13:02
0
1
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте выражение CASE, которое проверяет состояние столбца и только условно пытается проанализировать как действительную дату:

SELECT
    MyColumn,
    CASE WHEN REGEXP_LIKE(MyColumn, '^\s*\d\d\d\d\d\d\s*$')
         THEN TO_CHAR(TO_DATE(TRIM(MyColumn), 'YYMMDD'), 'MM/DD/YYYY')
         ELSE MyColumn END AS new_col
FROM MyTable

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

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