2014-11-14 43 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是TN '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'不兼容。