Bu başlık altında Oracle’da pl-sql kullanarak verilen tarihler arasındaki ay sonlarının listesini aşağıdaki sorgu ile elde edebilirsiniz. Aşağıdaki kod 2014 başından 2016 yılı arasındaki ay sonlarının listesini vermektedir.

SELECT TO_CHAR(tum_gunler,'dd.mm.yyyy') AS ay_sonlari
  FROM (SELECT to_date('01.01.2014','dd.mm.yyyy') + LEVEL as tum_gunler
          FROM dual
       CONNECT BY LEVEL <= to_date('01.01.2016','dd.mm.yyyy')-to_date('01.01.2014','dd.mm.yyyy')
       )
WHERE tum_gunler = last_day(tum_gunler)

Yukarıdaki kod iç içe 2 tane select cümlesinden oluşmaktadır. Yukarıdaki kodu anlamak için önce içteki sorgunun anlaşılması gerekmektedir. İçteki sorgu budur:

SELECT to_date('01.01.2014','dd.mm.yyyy') + LEVEL as tum_gunler
       FROM dual
    CONNECT BY LEVEL <= to_date('01.01.2016','dd.mm.yyyy')-to_date('01.01.2014','dd.mm.yyyy')

içteki sorguda CONNECT BY LEVEL yapısı ile 01.01.2014 tarihinden itibaren birer gün artarak, tarihler listelenmiştir. 01.01.2016 ile 01.01.2014 yıllarını birbirinden çıkarırsak;sonuç 730 olacaktır. Aslında içteki sorgumuz 730 adet eleman getirmektedir.

İçteki sorguda üretilen 730 satırlık tarih datası; dıştaki sorguda yalnızca ay sonları kalacak şekilde filtrelenir. Dıştaki sorgudaki mantık ise şudur: last_day fonksiyonu; ilgili ayın son gününü verir. Gün, ilgili ayın son gününe eşit ise; bu değer ay sonudur.

Sonuç çıktı şu şekilde olacaktır.

pl sql ay sonları

oracle ay sonlarının listesi