Jak obliczyć wiek w SQL (PostgreSQL, MySQL, SQL Server)
Poznaj praktyczne wzorce SQL do obliczania wieku na podstawie daty urodzenia: ukończone lata, dokładne lata i miesiące oraz wiek na określoną datę. Zawiera przykłady PostgreSQL, MySQL i SQL Server.
Chcesz obliczyć wiek w SQL na podstawie daty urodzenia? W tym przewodniku przedstawiono praktyczne, gotowe do kopiowania zapytania do popularnych baz danych. Dowiesz się, jak obliczyć:
- Wiek w latach (ukończone lata)
- Wiek na określoną datę (nie tylko dzisiaj)
- Dokładny wynik w stylu (lata i miesiące), gdy potrzebujesz więcej szczegółów
1) Zdecyduj, co „wiek” oznacza w Twoim przypadku użycia
Większość logiki biznesowej wykorzystuje ukończone lata. Oznacza to, że osoba urodzona 10.06.2000 r. będzie miała 25 lat 10.06.2026 r., a nie wcześniej. Zachowaj ostrożność przy prostym odejmowaniu roku, np. ROK(dzisiaj) - ROK(dob), ponieważ przed urodzinami jest to błędne.[[TAG_19]]]
2) PostgreSQL: wiek w latach (ukończone lata)
PostgreSQL ma wbudowaną funkcję age(), która zwraca interwał. Wyodrębnij pełne lata w ten sposób:
WYBIERZ WYCIĄG(ROK Z wieku(CURRENT_DATE, data ur.)) AS wiek_lat
OD osób;
PostgreSQL: wiek na określoną datę
WYBIERZ WYCIĄG(ROK Z wieku(DATA '2026-02-23', data ur.)) AS wiek_lat
OD osób;
3) MySQL: wiek w latach (ukończone lata)
W MySQL użyj TIMESTAMPDIFF:
WYBIERZ TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS wiek_lat
OD osób;
MySQL: wiek na określoną datę
WYBIERZ ZNACZNIK CZASOWYDIFF(ROK, data urodzenia, DATA('2026-02-23')) AS wiek_lata
OD osób;
4) SQL Server: wiek w latach (ukończone lata)
Typowy wzorzec w SQL Server to DATEDIFF minus czek urodzinowy:
WYBIERZ
DATEDIFF(ROK, data data, RADOWANIE(GETDATE() JAKO data))
- SPRAWA
WHEN DATEADD(ROK, DATEDIFF(ROK, dob, CAST(GETDATE() AS data)), dob) > CAST(GETDATE() AS data)
WTEDY 1 INNE 0
END AS wiek_lat
OD osób;
SQL Server: wiek na określoną datę
OŚWIADCZ @as_of date = '23.02.2026';
WYBIERZ
DATEDIFF(ROK, data urodzenia, @as_of)
- SPRAWA
KIEDY DATEADD(ROK, DATEDIFF(ROK, data_data, @as_of), data_dob) > @as_of
WTEDY 1 INNE 0
END AS wiek_lat
OD osób;
5) Dokładny wiek (lata i miesiące) – przykład
Jeśli chcesz uzyskać „dokładną” prezentację, np. „31 lat i 4 miesiące”, oblicz najpierw lata, a następnie miesiące po ostatnich urodzinach. Oto jeden przykład PostgreSQL:
Z bazowym AS (
WYBIERZ dane, CURRENT_DATE AS as_of
OD ludzi
)
WYBIERZ
WYCIĄG(ROK Z wieku (od, data urodzenia)) AS lat,
WYCIĄG(MIESIĄC OD wieku (od, data urodzenia)) JAKO miesiące
Z bazy;
Typowe pułapki
- Strefy czasowe: jeśli to możliwe, przechowuj datę DOB jako
datę. Daty i godziny mogą zmieniać się w różnych strefach. - Urodziny w dzień przestępny: określ, co dzieje się w latach innych niż przestępne. Większość systemów traktuje urodziny 2004-02-29 jako 28.02 lub 01.03, w zależności od zasad.
- Null lub przyszły DOB: filtr lub ochrona, w przeciwnym razieTwoje zapytanie zwróci wartości null lub wartości ujemne.
Szybka kontrola poprawności
Jeśli chcesz szybko zweryfikować pojedynczy DOB, możesz skorzystać z kalkulatora online: Oblicz wiek online.
Powiązane przewodniki
Często zadawane pytania
Dlaczego ROK(dzisiaj) minus ROK(dob) jest błędny?
Ignoruje, czy urodziny miały już miejsce w tym roku, więc zawyża wiek przed urodzinami.
Jaki jest najbezpieczniejszy typ SQL dla daty urodzenia?
Użyj kolumny data (a nie datetime) dla DOB, jeśli zależy ci tylko na dniu kalendarzowym.