2011-07-28 128 views

回答

3

一種選擇是

add_months(trunc(add_months(<<your date>>,-1),'YYYY'), 13) 

SQL> ed 
Wrote file afiedt.buf 

    1 select add_months(trunc(add_months(date '1980-02-17', -1), 'YYYY'), 13 
) 
    2* from dual 
SQL>/

ADD_MONTH 
--------- 
01-FEB-81 

SQL> ed 
Wrote file afiedt.buf 

    1 select add_months(trunc(add_months(date '1980-01-17', -1), 'YYYY'), 13 
) 
    2* from dual 
SQL>/

ADD_MONTH 
--------- 
01-FEB-80 

SQL> ed 
Wrote file afiedt.buf 

    1 select add_months(trunc(add_months(date '1980-12-17', -1), 'YYYY'), 13 
) 
    2* from dual 
SQL>/

ADD_MONTH 
--------- 
01-FEB-81 
+1

它不適用於1980-01-31或1月份的任何其他日期。 – Codo

+0

@科多 - 德哦!謝謝你的收穫。更新它來修復該錯誤。 –

0

你可以嘗試:

select add_months(trunc(date '1980-12-17' - 32, 'YEAR') + 31, 12) 
from dual 

在此查詢,32日的一年內每天數1.它可以在一月和二月的其他日期進行調整,但不適用於今年晚些時候因閏年而導致的目標日期ularities。

0

我這樣做有點不同,不過這似乎比ADD_MONTHS方法更清晰一點對我說:

SELECT 
    employee_join_date 
    , CASE 
     WHEN extract(MONTH FROM employee_join_date) >= 2 
      THEN to_date(extract (YEAR FROM employee_join_date)+1 || '0201', 'yyyymmdd') 
     ELSE to_date(extract (YEAR FROM employee_join_date) || '0201', 'yyyymmdd') 
    END AS following_feb_1 
FROM 
    YOUR_TABLE; 

注意,如果該員工已於2月1日僱用的,這將返回以下的2月1日年。如果你不想用那個「> 2」而不是「> = 2」。

相關問題