SQL에서 나이(age) 계산하기
게시일 : 2019년 02월 13일
# PostgreSQL
# age
# MySQL
SQL로 나이(age) 계산하는 법을 알아본다.
참고 : 데이터 분석을 위한 SQL레시피 내용을 바탕으로 작성하였다.
나이는 매년 변하는 수치이기 때문에 데이터베이스에 저장하는 것은 좋은 방법이 아니다. 저장하더라도 매년 업데이트를 해야 한다. 또한, 나이 계산 시 생일이 지났는지를 고려한 만 나이를 계산해야 하는 경우가 많다.
MySQL - 계산식을 활용
데이터 분석을 위한 SQL레시피에 따르면 생일까지 고려한 만 나이를 계산해주는 식이 존재한다.
날짜에서 ‘-‘를 제거하여 숫자로 만들고 둘의 차에 10000을 나눈 값에 내림을 취하면 된다.
` 예시 : FLOOR( (20190213 - 19950624) / 10000 )`
MySQL에는 날짜타입을 자동으로 텍스트로 인식할 수 있다. CAST로 INT를 지정하기 위해 UNSIGNED(SIGNED)를 활용한다.
SELECT FLOOR( (CAST(REPLACE(CURRENT_DATE,'-','') AS UNSIGNED) -
CAST(REPLACE('1995-06-24','-','') AS UNSIGNED)) / 10000 ); => 23
PostgreSQL - age function
PostgreSQL에는 나이 계산에 유용한 age function이 존재한다. age function은 기간을 INTERVAL 단위로 알려준다. 여기에 EXTRACT 함수만 사용하면 쉽게 만 나이를 계산할 수 있다.
SELECT age( 계산할 시점, 기준 시점(생일) );
-- 날짜는 텍스트 타입, 날짜 타입 모두 가능
SELECT age('2019-02-13','1995-06-24'); => 23 years 7 mons 19 days
SELECT EXTRACT( year FROM age(CURRENT_DATE,'1995-06-24')); => 23
계산식을 활용할 수도 있다. PostgreSQL에는 INT 계산끼리는 자동으로 floor 처리하고 날짜 타입을 TEXT로 타입지정을 반드시 해야 한다.
SELECT (CAST(REPLACE(CAST(CURRENT_DATE AS TEXT),'-','') AS INTEGER) -
CAST(REPLACE(CAST('1995-06-24' AS TEXT),'-','') AS INTEGER)) / 10000;