개발공작소
728x90

 

오라클 천단위 콤마(,) 찍는 방법

 

1. TO_CHAR 함수 활용

2. 정규식 활용

 

 

TO_CHAR 기본문법 및 샘플코드

SELECT TO_CHAR([숫자 컬럼], [패턴]) FROM [테이블];
SELECT 
	TO_CHAR(123456789, 'FM000,000,000') AS "val", 
	LENGTH(TO_CHAR(123456789, 'FM000,000,000')) AS "length" 
FROM dual;
--결과 : val = 123,456,789, length 11

SELECT TO_CHAR(123456789, '000,000') AS "val" FROM dual;
--결과 : ########

SELECT 
	TO_CHAR(123456789, '000,000,000') AS "val", 
	LENGTH(TO_CHAR(123456789, '000,000,000')) AS "length" 
FROM dual;
--결과 : val = 123,456,789, length 12

 

샘플코드를 3가지로 나누어 보았다. 각 코드는 패턴값에 따라 다른 값을 리턴해주고 있다. 중요!

 

 

첫번째 : FM키워드를 사용하여, 문자열 맨 앞에 공백이 붙지 않음 => 길이 11

두번째 : 숫자값보다 패턴값이 작으면 값을 리턴하지 못함.

세번째 : FM키워드를 사용하지 않아, 문자열 맨 앞에 공백이 붙음 => 길이 12

 

 

결국 중요한 건, 패턴값이 숫자값보다 길어야 한다는 것인데, 그럴 때는 안전하게 

FM000,000,000,000,000,000,000과 같이 엄청 길게 써주면 된다.

 

하지만 예외의 상황으로 패턴값보다 큰 숫자가 들어 올 경우를 대비하고 싶을 때는 정규식 표현을 사용하면 된다.

 

 

 

정규식 사용 기본문법 및 샘플코드

SELECT REGEXP_REPLACE(REVERSE(REGEXP_REPLACE(REVERSE(TO_CHAR([숫자컬럼])), 
	   '(\d{3})','\1,')), '^,','') AS val    
FROM [테이블];
SELECT REGEXP_REPLACE(REVERSE(REGEXP_REPLACE(REVERSE(TO_CHAR(999999999999)), 
	   '(\d{3})','\1,')), '^,','') AS val    
FROM dual;

--결과 : 999,999,999,999

 

보기에는 조금 어지럽지만, 그래도 얼마나 큰 숫자가 들어올 지 예측되지 않는 상황에서는

안전하게 정규식함수를 사용하는 것도 좋은 방법이다.

 

 

 

728x90
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!