Oracle 查询返回当月的第一个星期日

问题描述

我有一个查询要返回当月的第一个星期日。但是,如果第一个星期日是该月的第一天,则改为下一个星期日。怎么能去掉它返回每月第一天的第一个星期日?

以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>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...