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.