问题描述
我有一个查询要返回当月的第一个星期日。但是,如果第一个星期日是该月的第一天,则改为下一个星期日。怎么能去掉它返回每月第一天的第一个星期日?
以2021年8月1日为例,查询返回2021年8月8日第二个星期日。
SELECT TO_CHAR(NEXT_DAY(TRUNC(TO_DATE(('20210801'),'yyyyMMdd'),'MM'),'Sunday'),'yyyyMMdd') AS FIRST_SUNDAY FROM DUAL;
解决方法
将一天移回上个月的最后一天:
SQL> SELECT TO_CHAR (
2 NEXT_DAY (TRUNC (TO_DATE (('20210801'),'yyyyMMdd'),'MM') - 1,3 'sunday'),-- ^^
4 'yyyyMMdd') AS FIRST_SUNDAY --> this
5 FROM DUAL;
FIRST_SU
--------
20210801
SQL> SELECT TO_CHAR (
2 NEXT_DAY (TRUNC (TO_DATE (('20210701'),4 'yyyyMMdd') AS FIRST_SUNDAY
5 FROM DUAL;
FIRST_SU
--------
20210704
SQL>