Bloga Dön
3 min read

SQL'de Yaş Nasıl Hesaplanır (PostgreSQL, MySQL, SQL Server)

Yaşı doğum tarihinden itibaren hesaplamak için pratik SQL kalıplarını öğrenin: tamamlanan yıllar, kesin yıllar ve aylar ve belirli bir tarih itibarıyla yaş. PostgreSQL, MySQL ve SQL Server için örnekler içerir.

SQL'de Yaş Nasıl Hesaplanır (PostgreSQL, MySQL, SQL Server)

Doğum tarihine göre SQL'de yaşı hesaplamamız mı gerekiyor? Bu kılavuz, yaygın veritabanları için pratik, kopyalamaya hazır sorguları gösterir. Nasıl hesaplanacağını öğreneceksiniz:

  • Yıl olarak yaş (tamamlanan yıl)
  • Belirli bir tarih itibarıyla yaş (sadece bugün değil)
  • Daha fazla ayrıntıya ihtiyaç duyduğunuzda tam bir stil çıktısı (yıllar ve aylar)

1) Kullanım durumunuz için "yaş"ın ne anlama geldiğine karar verin

Çoğu iş mantığı, tamamlanan yılları kullanır. Bu, 2000-06-10'da doğan birinin 2026-06-10'da 25 yaşında olduğu anlamına geliyor, daha erken değil. YEAR(today) - YEAR(dob) gibi basit yıl çıkarma işlemlerine dikkat edin, çünkü doğum gününden önce yanlıştır.

2) PostgreSQL: yıl olarak yaş (tamamlanan yıl)

PostgreSQL'de aralık döndüren yerleşik bir age() işlevi vardır. Yılların tamamını şu şekilde çıkarın:

SELECT EXTRACT(YEAR FROM age(CURRENT_DATE, dob)) AS age_years
KİŞİLERDEN;

PostgreSQL: belirli bir tarih itibarıyla yaş

SELECT EXTRACT(YEAR FROM age(DATE '2026-02-23', dob)) AS age_years
KİŞİLERDEN;

3) MySQL: yıl olarak yaş (tamamlanan yıl)

MySQL'de, TIMESTAMPDIFF kullanın:

AGE_years AS TIMESTAMPDIFF(YEAR, dob, CURDATE()) SEÇİN
KİŞİLERDEN;

MySQL: belirli bir tarih itibarıyla yaşı

SELECT TIMESTAMPDIFF(YEAR, dob, DATE('2026-02-23')) AS age_years
KİŞİLERDEN;

4) SQL Server: yıl olarak yaş (tamamlanan yıl)

SQL Server'da yaygın bir kalıp, DATEDIFF eksi doğum günü kontrolüdür:

SEÇ
  DATEDIFF(YEAR, dob, CAST(GETDATE() AS tarih))
  - VAKA
      WHEN DATEADD(YEAR, DATEDIFF(YEAR, dob, CAST(GETDATE() AS tarih))), dob) > CAST(GETDATE() AS tarih)
      SONRA 1 BAŞKA 0
    age_years AS SON
KİŞİLERDEN;

SQL Sunucusu: belirli bir tarih itibarıyla yaşı

DECLARE @as_of date = '2026-02-23';
SEÇ
  DATEDIFF(YIL; dob; @as_of)
  - VAKA
      WHEN DATEADD(YEAR, DATEDIFF(YEAR, dob, @as_of), dob) > @as_of
      SONRA 1 BAŞKA 0
    age_years AS SON
KİŞİLERDEN;

5) Tam yaş (yıl ve ay) örneği

"31 yıl 4 ay" gibi "kesin" bir sunum istiyorsanız, önce yılları, ardından son doğum gününden sonraki ayları hesaplayın. İşte bir PostgreSQL örneği:

Temel AS İLE (
  CURRENT_DATE AS_of olarak SELECT dob
  insanlardan
)
SEÇ
  EXTRACT(YEAR FROM age(as_of, dob)) AS yıl,
  EXTRACT(MONTH FROM age(as_of, dob)) AS ay
Üssünden;

Yaygın tuzaklar

  • Saat dilimleri: Mümkün olduğunda DOB'u tarih olarak saklayın. Tarihsaatler bölgeler arasında değişebilir.
  • Artık gün doğum günleri: Artık olmayan yıllarda ne olacağını tanımlayın. Çoğu sistem, politikaya bağlı olarak 2004-02-29 doğum günlerini 28-02 veya 03-01 olarak ele alır.
  • Boş veya gelecekteki DOB: filtre veya koruma, aksi takdirdesorgun boş veya negatif değerler döndürecek.

Hızlı akıl sağlığı kontrolü

Tek bir DOB'u hızlı bir şekilde doğrulamak istiyorsanız çevrimiçi hesap makinesini kullanabilirsiniz: Çevrimiçi Yaşı Hesaplayın.

İlgili kılavuzlar

SSS

YEAR(today) eksi YEAR(dob) neden yanlış?

Doğum gününün bu yıl henüz gerçekleşip gerçekleşmediğini göz ardı eder, dolayısıyla doğum gününden önceki yaşı olduğundan fazla gösterir.

Doğum tarihi için en güvenli SQL türü nedir?

Yalnızca takvim gününü önemsiyorsanız DOB için bir tarih sütunu (tarihsaat değil) kullanın.