Вычитание из диапазона дат другого диапазона

Как получить набор строк получаемых при пересечении одного диапазона дат другим?

Например диапазон:

01.01.2020 - 24.06.2020`  

пересекается с:

01.05.2020 - 31.05.2020

Ожидаемый результат:

01.01.2020 - 30.04.2020 01.06.2020 - 24.04.2020

Ответы (1 шт):

Автор решения: 0xdb

Можно так (на db<>fiddle):

select 
    min (l.dt)||'-'||max (l.dt) lower, 
    min (u.dt)||'-'||max (u.dt) upper
from t1 l cross join t1 u 
cross join (select min (dt) lb, max (dt) ub from t2) 
where l.dt < lb
and   u.dt > ub

Результат:

LOWER                 UPPER                
--------------------- ---------------------
01.01.2020-30.04.2020 01.06.2020-24.06.2020
→ Ссылка