background img
Mar 21, 2017
1067 Views
0 0

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

Yazar :

İ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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

The maximum upload file size: 50 MB. You can upload: image, audio, video, document, text, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here