SQL Server’da Doğru Yaş Hesabı Yapmak

Projenizde veya sizden talep edilen bir raporu hazırlarken bağzen yaş hesabı yapılması ihtiyacı duyuluyor. SQL Server‘da yaş hesabı yapılırken aşağıdaki gibi bir sorgu ile şimdiki tarihten kullanıcının doğum tarihini çıkartıp aradaki farkı yıl olarak veriyoruz. Dikkat edilmediği taktirde bu kullanım şekli yaş hesabının yanlış yapılmasına sebep olabiliyor. Örnek üzerinden devam edecek olursak;

[sql]

DECLARE @BirthDate datetime=’2000-12-31′

SELECT DATEDIFF(YEAR,@BirthDate,GETDATE()) AS Age

[/sql]

age_false

Yaş hesabı yapmış olduğumuz doğum tarihi “31/12/2000” benim bu sorguyu çalıştırdığım tarihi “03/02/2015” aradaki yıl farkı bize “15” olarak dönüyor. Yaş hesabı yaptığımız tarihe henüz yaklaşmamış olmamıza rağmen +1 yıl fazla bir yaş değeri veriyor. Doğru yaş hesabını yapmak için sorgumuzu aşağıdaki gibi kullanmamız gerektiğini anlıyoruz.

[sql]

DECLARE @BirthDate datetime=’2000-12-31′

SELECT DATEDIFF(YEAR,@BirthDate,GETDATE()) -CASE WHEN DATEADD(YY,DATEDIFF(YEAR,@BirthDate,GETDATE()),@BirthDate)>GETDATE() THEN 1 ELSE 0 END AS AGE

[/sql]

age_true

Result ekranında da görüldüğü gibi doğru yaş hesabı yapmış oldu ve doğru olan “14” değerine ulaştık. Hesabımıza basit bir Case When yapısı ekleyerek gelen doğum tarihi bilgisinin gün ve ay olarakta şimdiki tarihten büyük olup olmadığını kontrol ettik. Eğer doğum tarihi bilgisi hesaplanma tarihinden küçükse, hesaplanan yaş değerinde “-1” değerini değilse “0” değerini çıkartıp doğru sonucu üretmiş olduk.

Sizinde bu konu hakkında farklı bir hesaplama yapınız varsa, yorum panelinden paylaşmanızı isterim.

Faydalı olması dileğiyle.

windows 10 education satın al

Mesut Güneş

Selçuk Üniversitesi Bilgisayar programcılığı bölümünden mezun olduktan sonra birçok firmada Yazılım, İş zekası ve Veritabanı Uzmanı olarak çalıştım. Şuan Türkiye’nin en büyük şirketlerinden biri olan Doğan Online’da Veritabanı Yöneticisi olarak çalışıyorum.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.