日付を比較する場合は、文字列に変換しないでください。Oracleには、日付/時刻演算のサポートが組み込まれています。
あなたの場合、出発日の月が前の月と等しいテーブルをクエリしているようですが、これは意味がありません。現在11月の場合、クエリは2010年10月、2009年10月、2008年10月などの行を返します。それでよろしいですか?
日付演算を使用して日付が前月内にあるかどうかを判断する最良の方法の1つは、現在の月の最初の日を返すTRUNC(date、'MONTH')とADD_MONTHS(date、- 1)、1か月前の日付を取得します。
SELECT TO_CHAR("HOL_DEPART_DATES"."DEPART_DATE", 'MM') as "Depart_Month",
TO_CHAR(ADD_MONTHS(sysdate, -1), 'mm') as "Current_Month"
FROM "HOL_DEPART_DATES"
WHERE "HOL_DEPART_DATES"."DEPART_DATE"
BETWEEN ADD_MONTHS(TRUNC(SYSDATE,'MONTH'),-1)
AND TRUNC(SYSDATE,'MONTH') - 0.00001;
「0.00001」は日付から1秒を引くため、日付範囲は実質的に(2010年11月であると仮定して)2010年10月1日00:00:00から2010年10月31日23:59:59になります。
別の同等の構文は次のようになります。
SELECT TO_CHAR("HOL_DEPART_DATES"."DEPART_DATE", 'MM') as "Depart_Month",
TO_CHAR(ADD_MONTHS(sysdate, -1), 'mm') as "Current_Month"
FROM "HOL_DEPART_DATES"
WHERE "HOL_DEPART_DATES"."DEPART_DATE"
>= ADD_MONTHS(TRUNC(SYSDATE,'MONTH'),-1)
AND "HOL_DEPART_DATES"."DEPART_DATE" < TRUNC(SYSDATE,'MONTH');