Oracle to_date с перехватом ошибки

UnisonUnison
1 min read

Имеется таблица транзакции (transactions). В ней имеется числовое поле - идентификатор транзакции (trnno) в формате 'yymmddnnnnnnnnnn', где:

yy - год mm - месяц,

dd - день,

nnnnnnnnnn - уникальное число за эту дату

но данное правило не всегда соблюдается и в поле trnno иногда (хотя очень редко) записываются числа, не соответствующие вышеприведенному правилу. Соответственно при выборке записей за определенную дату возникает ошибка преобразования поля trnno в дату.

Для решения этой проблемы воспользуемся конструкцией

DEFAULT expr ON CONVERSION ERROR

который присутствует с версии 12.2:

SELECT * FROM
   (
       SELECT to_date(substr(to_char(c.trnno), 1, 6) DEFAULT null ON CONVERSION ERROR, 'YYMMDD') TrnDate
       FROM transactions c
   )
   WHERE (sysdate - nvl(TrnDate, sysdate)) >= 90
0
Subscribe to my newsletter

Read articles from Unison directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Unison
Unison