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 ;