By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
CREATE TABLE my_table ( c_day ) AS
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 31;
31 rows affected
SELECT C_DAY,
LEAST(
TRUNC(TRUNC(SYSDATE) + 210, 'MM') + C_DAY - 1,
LAST_DAY(TRUNC(SYSDATE) + 210)
) AS result
FROM MY_TABLE
ORDER BY c_day
C_DAY | RESULT |
---|---|
1 | 2023-09-01 00:00:00 |
2 | 2023-09-02 00:00:00 |
3 | 2023-09-03 00:00:00 |
4 | 2023-09-04 00:00:00 |
5 | 2023-09-05 00:00:00 |
6 | 2023-09-06 00:00:00 |
7 | 2023-09-07 00:00:00 |
8 | 2023-09-08 00:00:00 |
9 | 2023-09-09 00:00:00 |
10 | 2023-09-10 00:00:00 |
11 | 2023-09-11 00:00:00 |
12 | 2023-09-12 00:00:00 |
13 | 2023-09-13 00:00:00 |
14 | 2023-09-14 00:00:00 |
15 | 2023-09-15 00:00:00 |
16 | 2023-09-16 00:00:00 |
17 | 2023-09-17 00:00:00 |
18 | 2023-09-18 00:00:00 |
19 | 2023-09-19 00:00:00 |
20 | 2023-09-20 00:00:00 |
21 | 2023-09-21 00:00:00 |
22 | 2023-09-22 00:00:00 |
23 | 2023-09-23 00:00:00 |
24 | 2023-09-24 00:00:00 |
25 | 2023-09-25 00:00:00 |
26 | 2023-09-26 00:00:00 |
27 | 2023-09-27 00:00:00 |
28 | 2023-09-28 00:00:00 |
29 | 2023-09-29 00:00:00 |
30 | 2023-09-30 00:00:00 |
31 | 2023-09-30 00:00:00 |