如何使用oracle查找本月的第一个星期四?
select trunc(sysdate, 'MM')firstday from dual;
以上是本月的第一天
答案 0 :(得分:3)
答案 1 :(得分:1)
如果您只是在一个月的第一天之后得到下一个星期四,那么之后部分意味着,如果第一天本身就是星期四,则您肯定会太迟地得到一个星期的日期。例如,2018-02-01是星期四,将其放入next_day()
会给您2018-02-08。
您需要获取上个月最后一天之后的下一个星期四:
next_day(trunc(sysdate, 'MM') - 1, 'THU')
两个值的演示;尤其是2月,3月和11月:
with t (dt) as (
select add_months(date '2018-01-15' , level - 1) from dual connect by level <= 12
)
select next_day(trunc(dt, 'MM'), 'THU') as wrong,
next_day(trunc(dt, 'MM') - 1, 'THU') as ok
from t;
WRONG OK
---------- ----------
2018-01-04 2018-01-04
2018-02-08 2018-02-01
2018-03-08 2018-03-01
2018-04-05 2018-04-05
2018-05-03 2018-05-03
2018-06-07 2018-06-07
2018-07-05 2018-07-05
2018-08-02 2018-08-02
2018-09-06 2018-09-06
2018-10-04 2018-10-04
2018-11-08 2018-11-01
2018-12-06 2018-12-06