如果你想比较日期,你不应该将它们转换为字符串 - Oracle内置支持日期/时间算术。
就你而言,你似乎在查询出发日期的月份与前一个月相等的表格 - 这是没有意义的。如果目前是11月,那么查询将返回2010年10月,2009年10月,2008年10月等行。你确定这是你想要的吗?
使用日期算法确定日期是否在上个月内的最佳方法之一是使用返回当前月份第一天的TRUNC(date,'MONTH')和ADD_MONTHS的组合(日期,-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月)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');
点上,你们俩,更有道理吧! – Coffeee 2010-11-26 16:54:20