PL SQL Dinamik Olarak Ay Çeyrek Yıl Başı Sonu Bulunması

oracle pl sql’de ay başı ay sonu çeyrek başı çeyrek sonu önceki çeyrek önceki çeyrek başı önceki çeyrek son günü v.s. gibi çok kullanılan sql ifadelerini aşağıya ekledim.
Trunc, add_months, last_day, trunc(,”) fonksiyonlarını kullanarak aşağıdaki gibi ilgili tarihleri getirdim.

AY

ay başı ay sonu

önceki ay, sonraki ay, ayın son günü, ayın ilk günü

SELECT sysdate as su_an,    --şu an 
       trunc(sysdate,'Q') as ceyrek_basi,   --çeyrek başı
       add_months(trunc(sysdate,'Q'),-3) as onceki_ceyrek_basi, --önceki çeyreğin başı
       add_months(trunc(sysdate,'Q'),+3) as sonraki_ceyrek_basi,    --sonraki çeyreğin başı
       add_months(trunc(sysdate,'Q'),+3)-1 as ceyrek_son_gunu,   --çeyrek sonu
       trunc(sysdate,'Q')-1 as onceki_ceyrek_son_gun    --önceki çeyrek son gün
  FROM sys.DUAL;

ÇEYREK

pl sql çeyrek dinamik

çeyrek başı, çeyrek son günü, önceki çeyrek, sonraki çeyrek

SELECT sysdate as su_an,    --şu an 
       trunc(sysdate,'MM') as ay_basi,  --ay başı
       trunc(sysdate,'Month') as ay_basi_,   --ay başı
       add_months(sysdate,-1) as bir_ay_once,    --bir ay önce
       last_day(sysdate) as bu_ayin_son_gunu,   --bu ayın son günü
       sysdate-30 as otuz_gun_once,  --add_months(sysdate,-1) den farklı sonuç verebilir.
       last_day(add_months(sysdate,-1) ) as gecen_ayin_son_gunu,  --onceki_ayin_son_gunu
       last_day(add_months(sysdate,-2) ) as iki_ay_once_ayin_son_gunu,  --2 ay önce ayın son günü
       trunc(add_months(sysdate,-3),'MM') as uc_ay_once_ayin_ilk_gunu   --üç ay önce ayın ilk günü 
  FROM sys.DUAL ;

YIL

pl sql yıl dinamik

yılın başı, yılın sonu

SELECT sysdate as su_an,    --şu an
       trunc(sysdate,'YYYY') bu_yilin_basi,
       add_months(trunc(sysdate,'YYYY'),+12)-1 bu_yilin_sonu,
       add_months(sysdate,-12) as gecen_sene, --1 yıl önce.
       trunc(add_months(sysdate,-12),'Year') as gecen_yil_ilk_gun, --geçen yılın ilk günü
       trunc(add_months(sysdate,-12),'YYYY') as gecen_yil_ilk_gun, --geçen yılın ilk günü, geçen yılın başı
       trunc(sysdate,'YYYY')-1 as bir_yil_once_son_gun, --geçen yılın son günü 
       trunc(add_months(sysdate,-12),'YYYY')-1 as iki_yil_once_son_gun --iki yıl önce son gün
  FROM sys.DUAL ;