SQL KTF SQL ile Kıdem Yılı Hesaplama

Admin

Yönetici
Site Yöneticisi
Katılım
25 May 2018
Mesajlar
1,078
Puanları
113
Konum
İstanbul
Web sitesi
www.excelarsivi.com
Ad Soyad
Excel Arşivi
SQL ile işe başlama ve bitiş tarihlerine göre verilen iki tarih arasındaki kıdem süresini yıl, ay, gün olarak hesaplanması için aşağıdaki gibi bir scalar fonksiyon yazmak gerekebilir. Söz konusu scalar fonksiyon verilen iki tarih arasındaki farkı gün, ay ve yıl olarak bulmakta ve string değer olarak sonuç döndürmektedir.
Birinci tarih işe giriş tarihi, ikinci tarih bugünün tarihi veya işten ayrılma tarihidir. İkinci tarih birinci tarihten büyük olamaz.

Kıdem Süresi Fonksiyonunun Oluşturulması

SQL:
ALTER FUNCTION [dbo].[FN_KIDEM] (@Tarih1 DATETIME,@Tarih2 DATETIME)
RETURNS CHAR(50)
AS
BEGIN
DECLARE @Gun AS INT,@Ay AS INT,@Yil AS INT,@GunAl AS INT,@AyAl AS INT,@Sonuc CHAR(100)
IF @Tarih2>=@Tarih1
BEGIN
IF DAY(@Tarih2)>=DAY(@Tarih1)
BEGIN
SET @Gun=DAY(@Tarih2)-DAY(@Tarih1)
END
ELSE
BEGIN
SET @Gun=(DAY(@Tarih2)+30)-DAY(@Tarih1)
SET @GunAl=1
END

IF (MONTH(@Tarih2)-ISNULL(@GunAl,0))>=MONTH(@Tarih1)
BEGIN
SET @Ay=MONTH(@Tarih2)-MONTH(@Tarih1)
END
ELSE
BEGIN
SET @Ay=(MONTH(@Tarih2)+12)-(MONTH(@Tarih1)+ISNULL(@GunAl,0))
SET @AyAl=1
END

IF (YEAR(@Tarih2)-ISNULL(@AyAl,0))>=YEAR(@Tarih1)
BEGIN
SET @Yil=YEAR(@Tarih2)-(YEAR(@Tarih1)+ISNULL(@AyAl,0))
END
ELSE
BEGIN
SET @Yil=YEAR(@Tarih2)-YEAR(@Tarih1)
END
SET @Sonuc=RTRIM(CONVERT(CHAR(3),@Yil))+' Yıl ' + LTRIM(CONVERT(CHAR(2),@Ay))+' Ay '+ RTRIM(CONVERT(CHAR(2),@Gun)) +' Gün '

END
ELSE
BEGIN
SET @Sonuc='Bitiş Tarihi Başlangıç Tarihinden Büyük'
END
RETURN @Sonuc
END
GO
Fonksiyonun Kullanılması
SELECT [dbo].[FN_KIDEM]('2010-01-14','2018-12-21')

Sonuç
7 Yıl 11 Ay 7 Gün

veya bugünün tarihi yerine GETDATE() fonksiyonu kullanılabilir.

SELECT [dbo].[FN_KIDEM]('2010-01-14',GETDATE())
 

yken

Yeni Üye
Katılım
26 Haz 2018
Mesajlar
8
Puanları
1
Yaş
49
Konum
istanbul
Merhaba,
Formül güzel çalışıyor ama 1 seneyi doldurmayan personel için Bitiş Tarihi Başlangıç Tarihinden Büyük hatası çıkıyor.
Böyle kişiler için de yıl olmadan mesela 5 ay 6 gün gibi sadece AY ve GÜN yazdırılabilir mi acaba?
 

Vedat ÖZER

Logo Uzmanı
Geliştirici
Katılım
4 Haz 2018
Mesajlar
94
Puanları
33
Yaş
28
Konum
Antalya / Merkez
Ad Soyad
Vedat ÖZER
Merhaba,

Ben denedim sonuç doğru veriyor. Hatalı dediğiniz sorguyu ekleyebilir misiniz. Kurgunuz şu şekilde olmalı çıkış yapmış bir personelin çıkış tarihi, çıkışı olmamış bir personelin ise günün tarihi yani GETDATE() gibi
 
Üst Alt