0

現在、日付フィールドを以下のステートメントと比較しようとしています

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」の形式です。

4

1 に答える 1

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' と互換性がありません。

于 2014-11-14T06:23:50.953 に答える