개발 & 데이터베이스/DB

오라클 숫자 천단위 콤마 찍는 방법 2가지 (TO_CHAR 함수)

K.두부 2022. 8. 24. 22:18
반응형

어떠한 숫자에 천단위로 콤마(,)를 찍고 싶으면 어떻게 해야할까요? 오라클에서는 TO_CHAR 함수 혹은 정규식 함수 (REGEXP_REPLACE) 를 이용해서 천단위로 콤마(,)를 찍을 수 있습니다. 두 가지 방법에 대한 장단점과 사용 방법에 대해서 알아보겠습니다.

 

1. TO_CHAR 함수를 이용하는 방법

2. 정규식 함수를 이용하는 방법

 

TO_CHAR 함수를 이용하는 방법

SELECT TO_CHAR(10000000000, 'FM999,999,999,999') AS MONEY
  FROM DUAL;

천단위 콤마(,)를 표현하기 위해서는 TO_CHAR 함수의 두 번째 인자값을 이용하면 된다.

TO_CHAR 함수를 이용해서 천단위를 표현하면

첫 번째 인자값보다 더 큰 길이의 두 번째 인자값을 미리 작성해야한다.

 

SELECT TO_CHAR(10000000000, 'FM999,999,999,999') AS MONEY
     , TO_CHAR(10000000000, 'FM999,999,999') AS MONEY2
     , TO_CHAR(10000000000, '999,999,999,999') AS MONEY3
  FROM DUAL;

위의 결과값에서 MONEY2 보면 알 수 있듯이 첫 번째 인자값이 더 크면 #### 으로 출력이 된다. 그렇기 때문에 미리 첫 번째인자값을 예상하고 최대 크기만큼의 값을 선언해야한다. 또한 FM 키워드를 사용하지 않으면 앞부분에 공백이 생겨서 출력된다.

 

 정규식 함수를 이용하는 방법

SELECT REGEXP_REPLACE(REVERSE(REGEXP_REPLACE(REVERSE(TO_CHAR(100000000000)), '(\d{3})', '\1,')), '^,', '') AS MONEY
  FROM DUAL;

REVERSE(TO_CHAR(100000000000)), '(\d{3})', '\1,')) : 숫자를 뒤집어서 뒤에서부터 3자리씩 콤마(,)를 추가한다.

REGEXP_REPLACE(REVERSE(REGEXP_REPLACE( ···· ), '^,', '') : 숫자를 다시 뒤집어서 맨 앞에 콤마가 있을 경우 제거한다.

 

다소 복잡해보일 수 있지만 REVERSE 함수를 함께 사용해서 콤마를 찍은 후에 맨 앞에 콤마가 있다면 삭제하는 과정을 거친다. TO_CHAR 함수처럼 최대 크기를 미리 예상해서 두 번째 인자값을 채울 필요가 없다. 정규식을 잘 알고 있다면 가장 좋은 방법이다.

반응형