ORA-01841 при использовании TO_DATE с нулевыми значениями - PullRequest
0 голосов
/ 08 января 2019

У меня есть столбец даты, отформатированный как числовой тип данных (10). Некоторые записи содержат -1 значения (ноль). Я хотел бы отформатировать этот столбец для типа даты. Использование функции TO_DATE возвращает это сообщение:

ORA-01841: (полный) год должен быть в диапазоне от -4713 до +9999, а не 0

Это вызвано нулевыми значениями? Как этого избежать?

TO_DATE(TEST.PRELIM_DATE,'YYYYMMDD')`

Спасибо

1 Ответ

0 голосов
/ 08 января 2019

Функция Oracle TO_DATE принимает NULL значения (и возвращает NULL в этом случае). Полученная ошибка означает, что данное значение не соответствует указанному формату.

Если -1 является единственным недопустимым значением, которое может отображаться, просто замените его на NULL, например:

TO_DATE(
    NULLIF(TEST.PRELIM_DATE, -1),
    'YYYYMMDD'
)

Начиная с Oracle 12.2, другим решением является использование предложения ON CONVERSION ERROR, например:

TO_DATE(
    TEST.PRELIM_DATE,
    'YYYYMMDD'
) DEFAULT NULL ON CONVERSION ERROR

Это перехватит все ошибки преобразования и вернет NULL вместо того, чтобы выдавать ошибку (обратите внимание, что это может привести к маскировке допустимых ошибок). С документация :

Необязательное предложение DEFAULT return_value ON CONVERSION ERROR позволяет указать значение, которое возвращает эта функция, если при преобразовании char в DATE возникает ошибка. Это условие не действует, если при оценке char возникает ошибка. return_value может быть выражением или переменной связывания, и оно должно вычисляться как строка символов типа данных CHAR, VARCHAR2, NCHAR, NVARCHAR2 или null. Функция преобразует return_value в DATE, используя тот же метод, который используется для преобразования char to <code>DATE. Если return_value не может быть преобразовано в ДАТУ , функция возвращает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...