[ORACLE] 문자열에 포함된 숫자에 천단위 컴마 추가 0 5 6,451

by 낭만오리 [SQL Query] ORACLE REGEXP_REPLACE [2019.08.26 17:22:45]


오라클 정규식을 이용하여 문자열에 포함된 숫자에 천단위 컴마를 추가하고 싶습니다.

SELECT REGEXP_REPLACE(REVERSE(REGEXP_REPLACE(REVERSE(REPLACE(COL_DESC, ',', '')), '(\d{3})','\1,')), '^,','') COL_DESC    
  FROM (
        SELECT '337000원*100명' COL_DESC FROM DUAL
       )

위 쿼리 결과는 337,000원*,100명 과 같이 나오는데 100명 앞쪽 "," 를 제거하고 싶은데 잘 안되네요.. ^^;

매번 도움에 감사드리며 고수님들의 노하우 부탁드립니다.

감사합니다.

by 마농 [2019.08.27 08:06:24]
WITH t AS
(
SELECT 1 pk, '337000원*100명' col_desc FROM dual
UNION ALL SELECT 2, '337000$*100x' FROM dual
UNION ALL SELECT 3, '1337000원*100명' FROM dual
UNION ALL SELECT 4, '337,000원*100명' FROM dual
UNION ALL SELECT 5, '12345678900원*1000명' FROM dual
)
-- (숫자1)(숫자3)(숫자아닌거1) 패턴을 찾아 컴마 붙이기 5번 반복 수행
SELECT *
  FROM t
 MODEL
 DIMENSION BY (pk)
 MEASURES (col_desc, CAST(col_desc AS VARCHAR2(99)) x)
 RULES ITERATE (5)
 ( x[ANY] = REGEXP_REPLACE(x[CV()], '(\d)(\d{3})([^0-9]|$)', '\1,\2\3') )
;

 


by 낭만오리 [2019.08.27 09:38:09]

역쉬~ 마농님 

 

이러면서 소스를 봤는데

모르는 구문이 너무 많네요..  ㅠㅠ

친절한 답변에 감사드리면 공부좀 해보고 어떻게 적용해야 할지 고민해보겠습니다

감사합니다.


by jkson [2019.08.27 11:07:37]

본문에 작성하신 쿼리가 제 환경에서는 다르게 나오는데 한글에 reverse가 잘 안 먹히는 거 같네요.

저게 잘 되신다면

REVERSE(REGEXP_REPLACE(REGEXP_REPLACE(REVERSE(REPLACE(COL_DESC, ',', '')), '(\d{3})','\1,'),'(,)([^(0-9)]|$)','\2'))

로 바꿔보시는 건 어떠실까요?

만약 잘 된다고 하더라도 환경이 달라진다면 한글에 reverse는 안정성을 보장 받을 수 없네요.


by 마농 [2019.08.27 11:10:56]

문자셋 때문일 듯 합니다.
  - 저는 UTF8 인데 결과가 질문자분과 다릅니다.
  - 한글 없이 영문만 있는 경우는 질문자분과 결과가 같습니다.
REVERSE 는 비공식 함수입니다.
  - 내부적으로 사용되는 함수입니다.
  - 한글 등에 문제가 있습니다.
  - 그래서 Reverse 사용하지 않는 방법으로 답변 했습니다.


by 낭만오리 [2019.08.27 12:40:26]

마농님 jkson님 답변 감사합니다.

두분 답변 참고하여 저장시 DB에서 변환하는 방식을 javascript를 이용하여 입력시에 변환하였고

기존에 입력된 자료는 두분 도움으로 정상적으로 보이도록 변경하였습니다.

 

감사합니다. ^^

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입