ORA-01861: литерал не соответствует строке формата,

В настоящее время я пытаюсь сравнить поля даты с приведенным ниже утверждением

AND (AIA.INVOICE_DATE >= NVL(TO_DATE(:P_INV_DT_FROM,'DD-MON-YYYY'), '01-JAN-1900')  
OR AIA.INVOICE_DATE IS NULL)
AND (AIA.INVOICE_DATE <= NVL(TO_DATE(:P_INV_DT_TO,'DD-MON-YYYY'), '31-DEC-4712')  
OR AIA.INVOICE_DATE IS NULL)

Тем не менее, я получаю ошибку ниже,

ORA-01861: литерал не соответствует строке формата 01861. 00000 - "литерал не соответствует строке формата"

* Причина: Литералы во входных данных должны иметь ту же длину, что и литералы в строке формата (за исключением начальных пробелов). Если модификатор "FX" был включен, литерал должен точно совпадать, без лишних пробелов.

* Действие: исправьте строку формата в соответствии с литералом.

PS: AIA.INVOICE_DATE имеет форму "DD-MON-YYYY" и p_inv_dt_from, а p_inv_dt_to имеет форму "YYYY/MM/DD HH24:MM:SS"

1 ответ

Вам необходимо явно указать формат "01-JAN-1900" и "31-DEC-4712" (то есть обернуть их в TO_DATE("01-JAN-1900", "DD-MON-YYYY")). В противном случае Oracle попытается преобразовать строки в дату на основе настроек сеанса среды того, кто выполняет код. Например, ваша сессия может иметь NLS_DATE_FORMAT='MM/DD/YYYY', что несовместимо с '01-JAN-1900'.

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