Wenn Sie Daten vergleichen möchten, sollten Sie sie nicht in Strings konvertieren - Oracle hat eine Unterstützung für Datum/Uhrzeit-Arithmetik.
In Ihrem Fall scheint es, dass Sie die Tabelle abfragen, in der der Monat des Abfahrtsdatums gleich dem vorherigen Monat ist - was keinen Sinn ergibt. Wenn es derzeit November ist, würde die Abfrage Zeilen von Oktober 2010, Oktober 2009, Oktober 2008 usw. zurückgeben. Sind Sie sicher, dass Sie das wollten?
Eine der besten Möglichkeiten, Datumsarithmetik zu verwenden, um festzustellen, ob ein Datum innerhalb des vorherigen Monats ist, ist eine Kombination von TRUNC (Datum, 'MONTH'), die den ersten Tag des aktuellen Monats mit ADD_MONTHS zurückgibt (Datum, -1), die das Datum einen Monat vorher erhält.
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;
Die "0.00001" subtrahiert 1 Sekunde ab dem Zeitpunkt, so dass der Datumsbereich wird wirksam (vorausgesetzt, sie jetzt November 2010 ist) 01-Oct-2010 00:00:00 bis 31-Oct-2010 23: 59:59.
Eine Alternative wäre äquivalente Syntax sein:
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');
Spot on, Sie beide, jetzt viel mehr Sinn macht! – Coffeee