在SQL oracle中的某个给定日期之后查找特定日期。
实施例: 雇员加入日期= 1980年12月17日。
我希望在加入日期后的第一个2月1日开始时获得日期和日期和时间。
答案 0 :(得分: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 :(得分:0)
你可以尝试:
select add_months(trunc( date '1980-12-17' - 32, 'YEAR') + 31, 12)
from dual
在此查询中,32是2月1日内的一天中的数字。它可以适用于1月和2月的其他日期,但由于闰年的违规行为,不适用于当年晚些时候的目标日期。 / p>
答案 2 :(得分: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日返回。如果您不希望仅使用“&gt; 2”而不是“&gt; = 2”。