• 3 min read
SQL에서 나이를 계산하는 방법(PostgreSQL, MySQL, SQL Server)
생년월일부터 나이를 계산하는 실용적인 SQL 패턴(완료 연도, 정확한 연도 및 월, 특정 날짜 기준 나이)을 알아보세요. PostgreSQL, MySQL 및 SQL Server에 대한 예제가 포함되어 있습니다.
생년월일부터 SQL로 나이를 계산해야 합니까? 이 가이드에서는 일반 데이터베이스에 대한 실용적이고 복사 가능한 쿼리를 보여줍니다. 다음을 계산하는 방법을 배우게 됩니다.
- 연령(완료 연수)
- 특정 날짜 기준 연령(오늘뿐만 아니라)
- 자세한 내용이 필요한 경우 정확한 스타일 출력(연도 및 월)
1) 사용 사례에서 '연령'이 무엇을 의미하는지 결정합니다.
대부분의 비즈니스 로직은 완료 연수를 사용합니다. 이는 2000년 6월 10일에 태어난 사람이 2026년 6월 10일에 25세가 된다는 것을 의미합니다. YEAR(today) - YEAR(dob)와 같은 단순 연도 뺄셈은 생일 전이 잘못되므로 주의하세요.
2) PostgreSQL: 연수(완료 연수)
PostgreSQL에는 간격을 반환하는 age() 함수가 내장되어 있습니다. 다음과 같이 전체 연도를 추출합니다.
추출 선택(YEAR FROM 나이(CURRENT_DATE, dob)) AS age_years
사람에게서;
PostgreSQL: 특정 날짜 기준 수명
SELECT EXTRACT(YEAR FROM age(DATE '2026-02-23', dob)) AS age_years
사람에게서;
3) MySQL: 연수(완료 연수)
MySQL에서는 TIMESTAMPDIFF:
TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age_years 선택
사람에게서;
MySQL: 특정 날짜 기준 수명
TIMESTAMPDIFF 선택(연도, dob, DATE('2026-02-23')) AS age_years
사람으로부터;
4) SQL Server: 연수(완료 연수)
SQL Server의 일반적인 패턴은 DATEDIFF에서 생일 확인을 뺀 것입니다.
선택
DATEDIFF(연도, dob, CAST(GETDATE() AS 날짜))
- 사례
WHEN DATEADD(연도, DATEDIFF(연도, dob, CAST(GETDATE() AS 날짜)), dob) > CAST(GETDATE() AS 날짜)
그 다음 1 그 외 0
END AS 연령_년
사람에게서;
SQL Server: 특정 날짜 기준 수명
DECLARE @as_of 날짜 = '2026-02-23';
선택
DATEDIFF(연도, dob, @as_of)
- 사례
언제 DATEADD(연도, DATEDIFF(연도, dob, @as_of), dob) > @as_of
그 다음 1 그 외 0
END AS 연령_년
사람에게서;
5) 정확한 연령(년 및 월) 예시
'31년 4개월'과 같은 '정확한' 표시를 원하는 경우 연도를 먼저 계산한 다음 마지막 생일 이후의 개월 수를 계산하세요. 다음은 PostgreSQL 예시 중 하나입니다.
기본 AS 사용(
SELECT dob, CURRENT_DATE AS_of
사람들로부터
)
선택
EXTRACT(YEAR FROM age(as_of, dob)) AS 연도,
EXTRACT(MONTH FROM age(as_of, dob)) AS 개월
FROM 베이스;
일반적인 함정
- 시간대: 가능한 경우 DOB를
날짜로 저장합니다. 날짜시간은 구역에 따라 바뀔 수 있습니다. - 윤일 생일: 윤년이 아닌 해에 무슨 일이 일어나는지 정의합니다. 대부분의 시스템은 정책에 따라 2004-02-29 생일을 02-28 또는 03-01로 처리합니다.
- Null 또는 향후 DOB: 필터 또는 가드, 그렇지 않은 경우쿼리가 null 또는 음수 값을 반환합니다.
빠른 상태 점검
단일 DOB를 신속하게 확인하려면 온라인 계산기를 사용할 수 있습니다. 온라인으로 연령 계산.
관련 가이드
FAQ
YEAR(오늘) 빼기 YEAR(dob)이 잘못된 이유는 무엇인가요?
올해 생일이 아직 지났는지 여부를 무시하므로 생일 전 연령을 과장합니다.
생년월일에 가장 안전한 SQL 유형은 무엇인가요?
날짜에만 관심이 있는 경우 DOB에 날짜 열(날짜/시간 아님)을 사용하세요.