오라클에서 숫자데이터를 천단위마다 ','로 구분하여 조회하는 방법을 알아보겠습니다.
방법은 크게 2가지로 나눌 수 있습니다.
방법 1. TO_CHAR 사용하기
참고. TO_CHAR 함수란?
👉 날짜, 숫자 등의 값을 문자열로 변환하는 함수
TO_CHAR 함수를 사용하여 포맷을 다음과 같이 지정해줍니다.
'FM999,999'
- FM: 소수점 이상의 공백 및 소수점 이하의 0 제거
- 9: 해당 자리의 숫자. 값이 없을 경우 소수점 이상은 공백, 소수점 이하는 0으로 표시
- 0: 해당 자리의 숫자. 값이 없을 경우 0으로 표시 👉 값을 고정적으로 표시하는 경우에 주로 사용.
SELECT TO_CHAR(123456, 'FM999,999') AS VAL1
FROM DUAL
FM을 사용하지 않으면?
그러면, FM을 사용하지 않으면 어떻게 될까요?
아래 쿼리에서 VAL1은 FM을 사용하고 VAL2는 FM을 사용하지 않았습니다.
SELECT TO_CHAR(123456, 'FM999,999,999,999') AS VAL1
, TO_CHAR(123456, '999,999,999,999') AS VAL2
FROM DUAL
결과는 다음과 같습니다.
겉으로 보기엔 똑같아 보이지만,
아래 그림과 같이 포맷으로 선언된 자릿수 중 숫자가 존재하지 않는 부분은 공백으로 채워진 것을 확인할 수 있습니다.
자릿수를 고정하는 방법
포맷 부분에 '0'을 사용하면 값이 없을 경우 0으로 표시됩니다.
SELECT TO_CHAR(1234567890, 'FM000,009,999,999,999') AS VAL1
FROM DUAL
※ TO_CHAR 함수 사용시 주의사항
그러나, TO_CHAR를 이용한 방식은 지정한 포맷의 자릿수를 넘어가면 문제가 발생합니다.
아래 쿼리에서 포맷은 6자리 이지만, 실제 값은 그 이상입니다.
SELECT TO_CHAR(123456789, 'FM999,999') AS VAL1
FROM DUAL
이때, 결과는 값을 반환하지 못하고 ########으로 표시됩니다.
※ TO_CHAR 함수를 사용 시에는
포맷값을 미래에 올 수 있는 큰 값을 대비하여 최대 길이만큼 미리 선언을 해 놓아야 합니다.
방법 2. 정규식 사용하기
정규식을 이용하는 방법
① 숫자를 뒤집어서 뒤에서부터 3자리마다 콤마(,)를 추가한다.
② 숫자를 다시 뒤집는다.
③ 맨 앞에 콤마(,)가 있으면 치환하여 제거한다.
정규식을 이용한 예제
SELECT REGEXP_REPLACE(REVERSE(REGEXP_REPLACE(REVERSE(TO_CHAR(123456789999999999)), '(\d{3})','\1,')), '^,','') AS VAL1
FROM DUAL
정규식 함수를 사용하면 보기에는 복잡하지만,
미래값을 예상하여 길이를 지정하지 않아도 된다는 장점이 있습니다.
'Database > Oracle' 카테고리의 다른 글
[Oracle] comment로 테이블, 컬럼 찾기 (2) | 2022.08.03 |
---|---|
[Oracle] 오라클 날짜, 한글 요일 구하기 (Feat. TO_CHAR) (0) | 2022.07.01 |
[Oracle] 오라클 TRUNC 함수 사용법 (날짜, 시간, 소수점 절사하기) (0) | 2022.06.30 |
[Oracle] 해당 월의 말일자만 조회하기, 가장 최근 일자만 조회하기 (Feat. LAST_DAY 함수) (0) | 2022.06.22 |
[Oracle] 쿼리 속도 향상 시키기 (Feat. 좌변을 가공하지 않기) (0) | 2022.06.10 |