Kıdem tazminatı vs. gibi önemli konularda istediğimiz sonuçları görebilmek için aşağıdaki proseduru kullanabilirsiniz...
Şimdiye kadar yaptığım testlerde hatalı sonuç çıkmadı. Sonuçlar Exceldeki "ETARİHLİ" fonksiyonuyla eştir.
y : iki tarih arasındaki Toplam Yılı hesaplar
m : iki tarih arasında Toplam Ayı hesaplar
d : iki tarih arasında Toplam Günü hesaplar
md : iki tarih arasındaki Günü hesaplar, Ay ve Yıl yok sayılır
yd : iki tarih arasındaki Günü hesaplar, Yıl yok sayılır
ym : iki tarih arasındaki Ayı hesaplar, Gün ve Yıl yok sayılır
Örnek kullanım 1:
Kod: Tümünü seç
SELECT
(SELECT SONUC FROM XLDATEDIFF ('y', '20.08.1978', '22.02.2012')) || ' Yıl ' ||
(SELECT SONUC FROM XLDATEDIFF ('ym', '20.08.1978', '22.02.2012')) || ' Ay ' ||
(SELECT SONUC FROM XLDATEDIFF ('md', '20.08.1978', '22.02.2012')) || ' Gün' AS "Yaşam Süreniz"
/* Sonuç : 33 Yıl 6 Ay 2 Gün */
FROM RDB$DATABASE
Kod: Tümünü seç
SELECT
(SELECT SONUC FROM XLDATEDIFF ('y', '20.08.1978', '22.02.2012')) AS "Yıl Farkı (y)", --Toplam Yıl
(SELECT SONUC FROM XLDATEDIFF ('m', '20.08.1978', '22.02.2012')) AS "Ay Farkı (m)", --Toplam Ay
(SELECT SONUC FROM XLDATEDIFF ('d', '20.08.1978', '22.02.2012')) AS "Gün Farkı (d)", --Toplam Gün
(SELECT SONUC FROM XLDATEDIFF ('md', '20.08.1978', '22.02.2012')) AS "Gün Farkı (md)", --Ay ve Yıl yok sayılır.
(SELECT SONUC FROM XLDATEDIFF ('yd', '20.08.1978', '22.02.2012')) AS "Gün Farkı (yd)", --Yalnız Yıl yok sayılır.
(SELECT SONUC FROM XLDATEDIFF ('ym', '20.08.1978', '22.02.2012')) AS "Ay Farkı (ym)" --Gün ve Yıl yok sayılır.
FROM RDB$DATABASE
Kod: Tümünü seç
create or alter procedure xldatediff (
interval char(2),
kucuk_tarih date,
buyuk_tarih date)
returns (sonuc bigint)
/*
y : iki tarih arasındaki Toplam Yılı hesaplar
m : iki tarih arasında Toplam Ayı hesaplar
d : iki tarih arasında Toplam Günü hesaplar
md : iki tarih arasındaki Günü hesaplar, Ay ve Yıl yok sayılır
yd : iki tarih arasındaki Günü hesaplar, Yıl yok sayılır
ym : iki tarih arasındaki Ayı hesaplar, Gün ve Yıl yok sayılır
*/
as
declare variable fyil smallint = 0;
declare variable fay smallint = 0;
begin
fay = iif(extract(day from kucuk_tarih) > extract(day from buyuk_tarih), -1, 0);
fyil = iif((datediff(month, kucuk_tarih, buyuk_tarih) + fay) -
datediff(year, kucuk_tarih, buyuk_tarih) * 12 < 0, -1, 0);
if (lower(interval) = 'y') then
begin
sonuc = datediff(year, kucuk_tarih, buyuk_tarih) + fyil;
suspend;
exit;
end
if (lower(interval) = 'm') then
begin
sonuc = datediff(month, kucuk_tarih, buyuk_tarih) + fay;
suspend;
exit;
end
if (lower(interval) = 'd') then
begin
sonuc = datediff(day, kucuk_tarih, buyuk_tarih);
suspend;
exit;
end
if (lower(interval) = 'yd') then
begin
sonuc = datediff(day, dateadd(year,
datediff(year, kucuk_tarih, buyuk_tarih) + fyil,
kucuk_tarih), buyuk_tarih);
suspend;
exit;
end
if (lower(interval) = 'md') then
begin
sonuc = datediff(day, dateadd(month,
datediff(month, kucuk_tarih, buyuk_tarih) + fay,
kucuk_tarih), buyuk_tarih);
suspend;
exit;
end
if (lower(interval) = 'ym') then
begin
sonuc = mod(datediff(month, kucuk_tarih, buyuk_tarih) + fay, 12);
suspend;
exit;
end
end