• Merhaba Ziyaretçi,
    Microsoft 365 Uygulamaları ile ilgili yeni haberler, dikkat çekici konular, ilgi ile takip edeceğiniz yazılar için.

    Abone Olun
  • ESTE - Microsoft Office Eğitimleri

    Yeni yıl Microsoft Office Eğitim planlarınız için bütçenizi oluşturmadan önce ESTE eğitim kalitesi ile tanışın. 🙌
    Kullanıcıların ihtiyacı olan yazılı materyal, dosya ve video kaynağı desteğimiz ile tüm ofis çalışanlarının iş süreçlerini rahatlatacak eğitimler planlayın. 🎯
    Microsoft Office eğitimlerimiz hakkında detaylı bilgi için bize ulaşın.

    👉 Microsoft Office Eğitim Talebi

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

Murat OSMA

Yönetici
Site Yöneticisi
Katılım
25 May 2018
Mesajlar
1,506
En iyi yanıt
13
Puanları
113
Konum
İstanbul
Web sitesi
excelarsivi.com
Ad Soyad
Murat OSMA
Office Vers.
Office 365 TR+EN
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
12
En iyi yanıt
0
Puanları
1
Yaş
54
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
288
En iyi yanıt
4
Puanları
63
Yaş
33
Konum
Antalya / Merkez
Ad Soyad
Vedat ÖZER
Office Vers.
2019
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