如果要比较日期,则不应将它们转换为字符串 - Oracle 内置了对日期/时间算术的支持。
在您的情况下,您似乎正在查询出发日期的月份等于前一个月的表 - 这没有意义。如果当前是 11 月,则查询将返回 2010 年 10 月、2009 年 10 月、2008 年 10 月等的行。您确定这是您想要的吗?
使用日期算术确定日期是否在上个月内的最佳方法之一是使用 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 年 11 月)01-Oct-2010 00:00:00 到 31-Oct-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');