Development/Etc

[Oracle] 만나이 구하기

비완 2024. 1. 16. 14:26
반응형

보통 나이를 구할때, sql에서 생년월일을 가져온 후, java 단에서 가공하는 형식으로 많이 사용하였다.

이번에 요구사항으로 검색조건에 나이를 사용할 일이 있어서, sql 에서 구하도록 방법을 찾아보았고, 다음과 같은 방법을 찾을 수 있었다.

SELECT TRUNC(MONTHS_BETWEEN(TRUNC(SYSDATE), TO_DATE('19000101','YYYYMMDD')) / 12)
FROM DUAL

그런데, 꼭 날짜를 이상하게 넣는 사람들이 있어, 실행시 오류가 발생하는 경우가 확인되었다.

날짜 변환시에 오류가 발생하는 경우 이를 감지해서 회피하도록 다음과 같은 방법으로 조치하였다.

SELECT DECODE(VALIDATE_CONVERSION(p.birth_date AS DATE, 'YYYYMMDD'), '1', TRUNC(MONTHS_BETWEEN(TRUNC(SYSDATE), TO_DATE(p.birth_date, 'YYYYMMDD')) / 12), 0) AS age
FROM people p

VALIDATE_CONVERSION() 는 날짜형식이 맞으면 1을, 맞지않으면 0을 반환하는 함수로 Oracle 12c R2 부터 사용가능하다.

 

 

참고: https://gent.tistory.com/235, https://gent.tistory.com/428

반응형

'Development > Etc' 카테고리의 다른 글

[Oracle] CLOB 조회 - 매우 긴 문자열  (0) 2020.03.05
[Oracle] 여러 row 하나로 합치기  (0) 2020.03.05
git reset 으로 날린 내용 복구  (0) 2019.11.08
암호화/복호화  (0) 2019.10.21
Table 복사  (0) 2019.09.26