'ORA-01722: 수치가 부적합합니다'
Oracle 쿼리 실행하다보면 자주 발생하는 에러중 하나입니다.
집계함수를 사용하던 중에 발생한 오류를 해결한 과정입니다.
'date_column'에 'yyyy-mm-dd'형태의 일자가 있고, 'a_columnm'에 날짜별 데이터가 있다고 가정했을때,
날짜별로 'a_columnm'이 갖는 값들에 대해 count를 하려합니다.
SELECT TO_CHAR(date_column, 'YYYY-MM') AS month,
a_column,
COUNT(*) AS count_per_value
FROM your_table_name
GROUP BY TO_CHAR(date_column, 'YYYY-MM'), a_column
ORDER BY month, a_column;
위 쿼리만 봤을 때 문제없이 실행되어야 하지만 'ORA-01722: 수치가 부적합합니다' 에러가 발생합니다.
TO_CHAR() 함수가 실행될 때 데이터 형식에 관련된 문제라고 판단되어 쿼리를 아래와 같이 실행하였습니다.
SELECT TO_CHAR(TO_DATE(date_column), 'YYYY-MM') AS month,
a_column,
COUNT(*) AS count_per_value
FROM your_table_name
GROUP BY TO_CHAR(TO_DATE(date_column), 'YYYY-MM'), a_column
ORDER BY month, a_column;
'date_column'의 형 변환을 TO_DATE(date_column) 처럼 해준 뒤에 실행하니 정상적으로 실행되었습니다.
다시 확인해보니 'date_column'의 형식이 character형식이었네요.
이처럼 oracle은 데이터 형시에 더 민감한 모습을 보여줍니다.
허무하게 해결되었네요 :)