blog
Oracle İki tarih arasındaki farkı Yıl, Ay, Gün olarak bulmak.

Oracle İki tarih arasındaki farkı Yıl, Ay, Gün olarak bulmak.

İ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:

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
 select tarih_hesapla(sysdate-999,sysdate,’%YIL% Yil’) from dual;
<code>
TARIH_HESAPLA(SYSDATE-999,SYSD
——————————
2 Yil
 select tarih_hesapla(sysdate-100,sysdate,’%HAFTA% Hafta %HAFTAGUN% Gün’) from dual;
TARIH_HESAPLA(SYSDATE-100,SYSD
——————————
14 Hafta 2 Gün

Erkan Çağlar

2002'den beri yazılım geliştiriyorum. İşletmelere özel yönetim paneli, ödeme sistemleri ve web projeleri yapıyorum.

erkancaglar.com'da hizmetlerim →

Yorumlar (0)

Henüz yorum yok. İlk yorumu siz yazın.

Yorum yazın

Yanıtlanan:
Yorumlar onaylandıktan sonra yayınlanır. E-posta adresiniz kimseyle paylaşılmaz.