İki tarih arasında geçen zamanı bulmanız, yaş hesaplamanız gerekebilir. Oracle’da iki tarih arasındaki farkı yıl, ay,gun olarak veren fonksiyon bulunmamaktadır.
Ben aşağıdaki şekilde bir sql ile hallettim:
SQL>SELECT
DOG_TAR DOGUM_TARIHI,
TRUNC( MONTHS_BETWEEN( SYSDATE, dog_tar)/12) yil,
TRUNC( MOD( MONTHS_BETWEEN( SYSDATE, dog_tar),12) ) ay,
TRUNC( (MONTHS_BETWEEN(SYSDATE,dog_tar)- TRUNC(MONTHS_BETWEEN( SYSDATE, dog_tar))) /0.032258064516129) gun
FROM
PERSONEL;
DOGUM_TARIHI YIL AY GUN
------------ ---------- ---------- ----------
11.04.1970 39 9 24
01.01.1960 50 1 3
01.01.1998 12 1 3
04.08.1997 12 6 0
13.02.1982 27 11 22
0.032258064516129 iki gün arasındaki fark.
SQL>SELECT MONTHS_BETWEEN( SYSDATE,SYSDATE-1) FROM DUAL;
MONTHS_BETWEEN(SYSDATE,SYSDATE
------------------------------
0,032258064516129
İki tarih arasındaki farkı yıl,ay,gün,hafta olarak hesaplayan fonksiyon.
CREATE OR REPLACE FUNCTION "TARIH_HESAPLA"(BAS_TARIH DATE, BIT_TARIH DATE,FORMAT
VARCHAR2 DEFAULT '%YIL% yil %AY% ay %AYGUN% gun')
RETURN VARCHAR2 DETERMINISTIC IS
SONUC VARCHAR2(100) ;
FARK NUMBER;
BEGIN
-- %YIL% : Iki tarih arasindaki fark yil olarak
-- %AY% : Iki tarih arasindaki fark ay olarak
-- %AYGUN% : Iki tarih arasindaki fark aydan kalan gun olarak
-- %HAFTA% : Iki tarih arasindaki fark hafta olarak
-- %HAFTAGUN% :Iki tarih arasindaki fark haftadan kalan gun olarak
SONUC := FORMAT;
FARK:=months_between(BIT_TARIH, BAS_TARIH);
SONUC := REPLACE(SONUC,'%YIL%',trunc(fark / 12));
SONUC := REPLACE(SONUC,'%AY%',trunc(mod(fark, 12)) );
SONUC := REPLACE(SONUC,'%AYGUN%',trunc( (fark - trunc(fark) ) / 0.032258064516129));
SONUC := REPLACE(SONUC,'%HAFTAGUN%',TRUNC(mod(BIT_TARIH-BAS_TARIH,7 )));
SONUC := REPLACE(SONUC,'%HAFTA%',TRUNC( (BIT_TARIH-BAS_TARIH)/7 ));
RETURN SONUC;
END;
Örnek:
SQL> select tarih_hesapla(sysdate-999,sysdate) from dual;
TARIH_HESAPLA(SYSDATE-999,SYSD
------------------------------
2 yil 8 ay 25 gun
SQL> select tarih_hesapla(sysdate-999,sysdate,'%YIL% Yil') from dual;
TARIH_HESAPLA(SYSDATE-999,SYSD
------------------------------
2 Yil
SQL> select tarih_hesapla(sysdate-100,sysdate,'%HAFTA% Hafta %HAFTAGUN% Gün') from dual;
TARIH_HESAPLA(SYSDATE-100,SYSD
------------------------------
14 Hafta 2 Gün
cok işime yaradı tskler.
Excellent blog post. I absolutely appreciate this site. Keep it up!