各範囲の開始日は2013年の日曜日ですが、2012年を年として表示しているため、例で提供する日付範囲に少し混乱しています。2012年はタイプミスだと思います。
これはあなたが望むものを手に入れますか?
select
case
when trunc(sysdate) between start_date and end_date
then to_char(start_date + 1, 'DD-MON-YYYY')
else to_char(start_date, 'DD-MON-YYYY')
end
|| ' - ' ||
case
when trunc(sysdate) between start_date and end_date
then to_char(end_date - 1, 'DD-MON-YYYY')
else to_char(end_date, 'DD-MON-YYYY')
end date_range
from
(
select
next_day(trunc(sysdate - 7 + ((level - 1) * 7)), 'SUN') start_date,
next_day(trunc(sysdate) + ((level - 1) * 7), 'SAT') end_date
from dual
connect by level < 5
)
4週間だけが必要な場合は、これを行うことができます
select
to_char(next_day(trunc(sysdate - 7 + ((level - 1) * 7)), 'SUN'), 'DD-MON-YYYY')
|| ' - ' ||
to_char(next_day(trunc(sysdate) + ((level - 1) * 7), 'SAT'), 'DD-MON-YYYY') date_range
from dual
connect by level < 5