クエリを実行しているテーブルには、日付が varchar2 として保存されています。varchar2 として格納されている日付を sysdate を使用して比較する必要がありますBETWEEN sysdate-1 AND sysdate-30
(先月の varchar2 日付を返すため)。
指定するTO_DATE(varchar2, 'DD-MON-YYYY')
と、「リテラルがフォーマット文字列と一致しません」というエラーが表示されます。
TO_DATE()
Oracle のドキュメントによると、これはvarchar2 から変換する場合に許容される形式であると書かれているため、行き詰まっています。
更新:これは企業データベースです。私はDBを設計しておらず、私が利用できるものでしか動作しません。データセットは膨大で、毎日 10,000 台以上の SCADA デバイスによって自動的に更新されます。
SELECT device_name, read_date, sysdate
FROM oracle_database
------- Data Returned by query --------
device_name read_date sysdate
Device 1 5/14/2013 22-Sep-14
Device 2 5/14/2013 22-Sep-14
Device 3 5/14/2013 22-Sep-14
Device 4 5/14/2013 22-Sep-14
Device 5 5/14/2013 22-Sep-14
Device 6 5/14/2013 22-Sep-14
Device 7 5/14/2013 22-Sep-14
TO_DATE を使用した結果
SELECT device_name, TO_DATE(read_date, 'DD-MON-YY'), sysdate
------- クエリによって返されるデータ ----------
ORA-01861: リテラルがフォーマット文字列と一致しません