如何使用Oracle SQL查找一个月的第一个星期四?

时间:2018-06-23 05:13:20

标签: sql oracle

如何使用oracle查找本月的第一个星期四?

select trunc(sysdate, 'MM')firstday from dual;

以上是本月的第一天

2 个答案:

答案 0 :(得分:3)

尝试使用以下SQL

SELECT NEXT_DAY(TRUNC(SYSDATE, 'MONTH'),'THURSDAY') FROM DUAL;

SQL Fiddle

答案 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