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'.