Вы можете просто сопоставить месяц и четверть, а затем выбрать четверть
with date_mapping as(select 1 month,3 quater from dual union all
select 2 month,3 quater from dual union all
select 3 month,3 quater from dual union all
select 4 month,6 quater from dual union all
select 5 month,6 quater from dual union all
select 6 month,6 quater from dual union all
select 7 month,9 quater from dual union all
select 8 month,9 quater from dual union all
select 9 month,9 quater from dual union all
select 10 month,12 quater from dual union all
select 11 month,12 quater from dual union all
select 12 month,12 quater from dual),
data as (select date '2020-12-01' date1 from dual)
select ds.quater from data dd ,date_mapping ds
where extract (month from dd.date1)=ds.month
ЕСЛИ ваш Quater не исправлен, вы можете использовать ниже
WITH quaters
AS (SELECT to_number(Regexp_substr(quaters, '[^-]+', 1, LEVEL)) quater
FROM (SELECT ( '1-4-7-10' ) AS quaters
FROM dual)
CONNECT BY LEVEL <= Regexp_count(quaters, '[^-]+')),
min_max_quater
AS (SELECT Max(quater) max_quater,
Min(quater) min_quater
FROM quaters),
date_mapping
AS (SELECT lvl month,
Min(quater) quater
FROM dual,
quaters
cross join (SELECT LEVEL lvl
FROM dual
CONNECT BY LEVEL < = 12)
WHERE lvl <= quater
and lvl <> quater
GROUP BY lvl
UNION ALL
SELECT LEVEL month,
min_quater
FROM min_max_quater
WHERE LEVEL > max_quater
CONNECT BY LEVEL <= 12
UNION ALL
SELECT max_quater,
min_quater
FROM
min_max_quater
)
SELECT ds.quater
FROM dual dd,
date_mapping ds
WHERE Extract (month FROM sysdate) = ds.month