2014-11-14 3 views
0

В настоящее время я пытаюсь сравнить поля даты с ниже заявлении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'

+0

Это не значения даты: '' 01 -JAN-1900'', ''31 -DEC-4712'' –

+0

Кроме того, если' AIA.INVOICE_DATE' имеет какой-либо «формат», это должна быть строка, а не столбец даты. –

ответ

2

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

Смежные вопросы