HomeORACLEORACLE エラーコード ORA-01861: リテラルが書式文字列と一致しません。 が表示される原因と対応

ORACLE エラーコード ORA-01861: リテラルが書式文字列と一致しません。 が表示される原因と対応について記載しています。

日付(年月日・Date)のみを扱う場合に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エラーを回避できます。

年月日日時分秒(日時・Timestamp)を用いる場合

ちなみに、時間、分、秒も含む場合は、やや複雑になり
以下のような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を実行することができます。

ページトップへ

トピックアップ メニュー

トピックアップ リンク

Copyright (C) トピックアップ All Rights Reserved.
inserted by FC2 system