Si vous voulez comparer des dates, vous ne devriez pas les convertir en chaînes - Oracle a intégré le support de l'arithmétique date/heure.
Dans votre cas, il semble que vous interrogiez la table où le mois de la date de départ est égal au mois précédent - ce qui n'a pas de sens. Si c'est en novembre, la requête retournera les lignes d'octobre 2010, octobre 2009, octobre 2008, etc. Etes-vous sûr que c'est ce que vous vouliez? L'une des meilleures façons d'utiliser l'arithmétique de date pour déterminer si une date est dans le mois précédent est d'utiliser une combinaison de TRUNC (date, 'MONTH'), qui renvoie le premier jour du mois en cours, avec ADD_MONTHS (date, -1), qui obtient la date un mois avant.
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;
Le "0,00001" soustraient une seconde du jour, de sorte que la plage de dates devient effective (en supposant qu'il est maintenant Novembre 2010) 01-Oct-2010 au 31-00:00:00 Oct-2010 23: 59:59.
Une syntaxe alternative équivalente serait:
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');
sur place, tous les deux, fait beaucoup plus de sens maintenant! – Coffeee