반응형
보통 나이를 구할때, 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' 카테고리의 다른 글
PostgreSQL 대소문자 구분 없이 비교 (0) | 2024.10.23 |
---|---|
[Oracle] CLOB 조회 - 매우 긴 문자열 (0) | 2020.03.05 |
[Oracle] 여러 row 하나로 합치기 (0) | 2020.03.05 |
git reset 으로 날린 내용 복구 (0) | 2019.11.08 |
암호화/복호화 (0) | 2019.10.21 |