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.
SYSDATE : Veritabanı sunucusuna ait tarih-saat bilgisini verir.
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
TRUNC : Belirtilen tarih alanının ilk anını hesaplar, saat bilgilerini sıfırlar.
SELECT TRUNC(SYSDATE) FROM DUAL
2022-11-02 00:00:00
SELECT TRUNC(SYSDATE, 'YEAR') FROM DUAL
2022-01-01 00:00:00
SELECT TRUNC(SYSDATE, 'MONTH') FROM DUAL
2022-11-01 00:00:00
TO_TIMESTAMP : String ifadeyi tarih formatına çevirir.
SELECT TO_TIMESTAMP('2022/01/01 12:00:01', 'YYYY/MM/DD HH:MI:SS') FROM DUAL
2022-01-01 12:00:01
TO_DATE : String ifadeyi tarih formatına çevirir.
SELECT TO_DATE('2022/01/01', 'YYYY/MM/DD') FROM DUAL
2022-01-01 00:00:00
TO_CHAR : Tarih ve saat biçimini string ifadeye çevirir.
SELECT SYSDATE, TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL
2022-11-02
SQL ile bu yıl
select TO_CHAR(TRUNC(SYSDATE),'YYYY') from dual
SQL ile bu gün
select TO_CHAR(TRUNC(SYSDATE),'DD.MM.YYYY') from dual
SQL ile bir gün önce
SELECT TO_DATE(current_date - 1) AS yesterday_date FROM dual
SQL ile bir gün sonra
SELECT TO_DATE(current_date + 1) AS tomorrow_date FROM dual
X Ay önceki ayın ilk gününü;
Ö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 SUM(SIRA) AS SIRA, TARIH FROM
(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
Sıra Tarih(Hafta)
1 01
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