Если вы хотите сравнивать даты, вам не следует преобразовывать их в строки - Oracle имеет встроенную поддержку арифметики даты / времени.
В вашем случае кажется, что вы запрашиваете таблицу, в которой месяцдата отъезда равна месяцу предыдущего - что не имеет смысла.Если в настоящее время это ноябрь, то запрос будет возвращать строки за октябрь 2010 года, октябрь 2009 года, октябрь 2008 года и т. Д. Вы уверены, что это то, что вы хотели?
Один из лучших способов использования арифметики даты для определениядата в предыдущем месяце должна использовать комбинацию TRUNC (date, 'MONTH'), которая возвращает первый день текущего месяца, с ADD_MONTHS (date, -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» вычитает одну секунду из даты, поэтому диапазон дат фактически становится (при условии, что сейчас ноябрь 2010 г.) с 01 октября 2010 г. с 00:00:00 до 31 октября 2010 г. 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');