ORACLE エラーコード ORA-01861: リテラルが書式文字列と一致しません。 が表示される原因と対応について記載しています。
ORA-01861: リテラルが書式文字列と一致しません。 が発生してしまう原因としては
日付あるいは日時を条件にしている場合の値に問題があるケースが考えれます。
例えば、以下のようなSQLを発行した場合にORA-01861エラーが発生します。
SELECT * FROM PRODUCT WHERE CREATE_DATE BETWEEN '2012123' AND '2012124'
上記は、日付を条件に検索する場合は
'YYYY-MM-DD'形式にする必要があるのですが
上記のSQLの条件
'2012123'は、これを満たしていません。
このような場合は、以下のようにすることで、ORA-01861エラーを回避できます。
SELECT * FROM PRODUCT WHERE CREATE_DATE BETWEEN '20120123' AND '20120124'
これで、ORA-01861エラーを回避できます。
ちなみに、時間、分、秒も含む場合は、やや複雑になり
以下のようなSQLを発行すると、ORA-01861エラーとなってしまいます。
SELECT TEST_TIMESTAMP FROM PRODUCT WHERE CREATE_DATE BETWEEN '2012/02/01 01:23:45' AND '2012/02/29 23:59:59'
上記のSQLは一見よさそうですが、ORA-01861エラーが発生してしまいます。
年月日だけでなく時分秒まで扱う場合は
TO_DATE関数を使うことで検索可能となります。
以下のようにしてやればOKです。
SELECT TEST_TIMESTAMP FROM PRODUCT WHERE CREATE_DATE BETWEEN TO_DATE('2012/02/01 01:23:45','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('2012/02/29 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
これで、「ORA-01861: リテラルが書式文字列と一致しません。」エラー発生を回避し、正常にSQLを実行することができます。