Oracle找到最接近每个月1号的星期三



我有一个棘手的Oracle需求,我需要在每个月中找到离每个月1号最近的星期三。我知道如何找到每个月的第一个星期三,但我很纠结,因为它可能是在前一个月。

这是我到目前为止所尝试的:

WITH aux ( first_month ) AS (
SELECT
trunc(add_months(DATE '2021-01-01', + level - 1), 'MM')
FROM
dual
CONNECT BY
level <= 12
)
SELECT
first_month,
trunc(first_month - 7, 'IW') + 3 last_thu,
trunc(first_month + 7, 'IW') + 3 next_thu
FROM
aux

根据距离月1日的距离选择下星期三或上星期三

WITH aux ( first_month ) AS (
SELECT
trunc(add_months(DATE '2021-01-01', + level - 1), 'MM')
FROM
dual
CONNECT BY
level <= 12
)
SELECT CASE WHEN NEXT_DAY(first_month ,'WEDNESDAY') - first_month >= 4 
THEN NEXT_DAY(first_month - 7,'WEDNESDAY')
ELSE NEXT_DAY(first_month ,'WEDNESDAY') END closest
FROM aux 

您可以使用下面的query -

SELECT CASE WHEN (NEXT_DAY(SYSDATE, 'WEDNESDAY') - TRUNC(SYSDATE, 'MM')) < (TRUNC(SYSDATE, 'MM') - NEXT_DAY(LAST_DAY(ADD_MONTHS(SYSDATE, -1)) - INTERVAL '7' DAY, 'WEDNESDAY'))
THEN NEXT_DAY(TRUNC(SYSDATE, 'MM'), 'WEDNESDAY')
ELSE
NEXT_DAY(LAST_DAY(ADD_MONTHS(SYSDATE, -1)) - INTERVAL '7' DAY, 'WEDNESDAY')
END NEAREST_WEDNESDAY
FROM DUAL;

演示。

最新更新