在SQL oracle中查找某個給定日期後的特定日期。在SQL oracle中查找某個給定日期後的特定日期。
例如: 員工加入日期= 1980年12月17日。
我希望在加入日期後的第一個2月1日開始時獲得日期和時間。
在SQL oracle中查找某個給定日期後的特定日期。在SQL oracle中查找某個給定日期後的特定日期。
例如: 員工加入日期= 1980年12月17日。
我希望在加入日期後的第一個2月1日開始時獲得日期和時間。
一種選擇是
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
你可以嘗試:
select add_months(trunc(date '1980-12-17' - 32, 'YEAR') + 31, 12)
from dual
在此查詢,32日的一年內每天數1.它可以在一月和二月的其他日期進行調整,但不適用於今年晚些時候因閏年而導致的目標日期ularities。
我這樣做有點不同,不過這似乎比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」。
它不適用於1980-01-31或1月份的任何其他日期。 – Codo
@科多 - 德哦!謝謝你的收穫。更新它來修復該錯誤。 –