Oracle SQL'de belirli bir süre geri gitmek ve bu tarihlere göre bir sıralama yapabilmek için bazı standart formarlar gerekir. Bu formatları kendi sorgunuz ile uygun bir şekilde birleştirerek sıralamayı istediğiniz gibi başlatıp hazırlayabilirsiniz. İlk olarak yardımcı fonksiyonlara bakalım.
SELECT SYSDATE FROM DUAL
2022-11-02 13:23:59
CURRENT_DATE : Kullanılan sunucuya ait sistemin tarih-saat bilgisini verir.
SELECT CURRENT_DATE FROM DUAL
2022-11-02 13:24:59
CURRENT_TIMESTAMP : Kullanıcıya ait sistemin tarih-saat bilgisini verir.
SELECT CURRENT_TIMESTAMP FROM DUAL
2022-11-02 13:26:56
DBTIMEZONE : Veritabanı sunucusuna ait saat dilimini verir.
SELECT DBTIMEZONE FROM DUAL
+00:00
LAST_DAY : Tarihe ait ayın son gününü verir.
SELECT LAST_DAY(SYSDATE) FROM DUAL
2022-11-30 13:29:41
NEW_TIME : Tarihe ait saat dilimini çevirir.
SELECT NEW_TIME(SYSDATE, 'GMT', 'PST') FROM DUAL
2022-11-02 05:31:31
ADD_MONTHS : Belirttiğiniz tarihe istenilen değer kadar ay ekler.
SELECT ADD_MONTHS(SYSDATE, 2) FROM DUAL
2023-01-02 13:32:41
EXTRACT : Tarih bilgisinden yıl, ay, gün, saat gibi her bir parçayı almayı sağlar.
SELECT EXTRACT(YEAR FROM DATE '2022-01-02') FROM DUAL
2022
SELECT EXTRACT(MONTH FROM DATE '2022-01-02') FROM DUAL
1
SELECT EXTRACT(DAY FROM DATE '2022-01-02') FROM DUAL
2
MONTHS_BETWEEN : Verilen tarih aralığını ay olarak hesaplar.
SELECT MONTHS_BETWEEN(ADD_MONTHS(SYSDATE, 2), SYSDATE) FROM DUAL
2
NEXT_DAY : Tarihten sonraki ilk günün tarihini verir.
SELECT NEXT_DAY(SYSDATE, 'SUNDAY') FROM DUAL
select TO_CHAR(TRUNC(SYSDATE),'DD.MM.YYYY') from dual
SELECT TO_DATE(current_date - 1) AS yesterday_date FROM dual
SELECT TO_DATE(current_date + 1) AS tomorrow_date FROM dual
Örnekte X=11
SELECT TRUNC(ADD_MONTHS(SYSDATE, -11), 'MM') FROM DUAL
2021-01-01 00:00:00
SQL'de son X ayı sıralar;
Örnekte X=5
SELECT 1 + LEVEL - 1 AS SIRA, to_char(add_months(trunc(sysdate), - LEVEL + 1), 'MM') AS TARIH from dual connect by level <= 5
SIRA TARIH
1 12
2 11
3 10
4 09
5 08
SQL'de son X günü tarihi ile sıralar;
Örnekte X=5
SELECT 1 + LEVEL - 1 AS SIRA, TO_CHAR((TRUNC(SYSDATE) - LEVEL + 1),'YYYY.MM.DD') AS TARIH FROM DUAL CONNECT BY LEVEL <= 5
SIRA TARIH
1 2021.12.01
2 2021.11.30
3 2021.11.29
4 2021.11.28
5 2021.11.27
Geriye dönük hafta numaraları listesi elde etme;
ör: Son 50 gün için hafta numaraları listesi
(SELECT 1 + LEVEL - 1 AS SIRA, TO_CHAR( TO_DATE(sysdate) - LEVEL + 1 , 'IW' ) AS TARIH
FROM DUAL CONNECT BY LEVEL <= 50) GROUP BY TARIH ORDER BY SIRA
35 52
84 51
133 50
182 49
231 48
280 47
329 46
Bulunduğunuz günden geri gün listesi elde etme.
SELECT to_char(TO_DATE (SYSDATE - (LEVEL -1)), 'DD.MM.YYYY') tarih FROM DUAL CONNECT BY LEVEL <= 360