如果你想比較日期,你不應該將它們轉換爲字符串 - 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