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.
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
tariholarak 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
- Yaş Nasıl Hesaplanır (kılavuzun tamamı)
- Excel'de Yaş Nasıl Hesaplanır?
- JavaScript'te Yaş Nasıl Hesaplanır?
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.