오라클 특수문자 치환 - olakeul teugsumunja chihwan

오라클 특수문자 치환 - olakeul teugsumunja chihwan

REPLACE 문법

REPLACE('컬럼명','찾을문구','변환문구')

REPLACE(target column, target_str, replace_str)

오라클에서는 문자열을 치환 또는 제거 하는 방법으로는 REPLACE 함수를 사용하면 됩니다.

아래 예제를 통해서 직접 결과를 보겠습니다.

REPLACE 특정문자 치환(맥스->AIR MAX)

특정문자 치환시 대문자, 소문자를 구분하기 때문에 유의해서 사용해야 합니다.

SELECT '이번에 산 신발은 맥스97이다. 나는 맥스95도 가지고있다' as str
,REPLACE('이번에 산 신발은 맥스97이다. 나는 맥스95도 가지고있다', '맥스', 'AIR MAX') as restr 
FROM DUAL;
오라클 특수문자 치환 - olakeul teugsumunja chihwan

REPLACE 특정문자 공백 변환(특별시->공백)

SELECT '나는 서울특별시에 살고 있습니다.' as str
,REPLACE('나는 서울특별시에 살고 있습니다.', '특별시', '') as restr 
FROM DUAL;
오라클 특수문자 치환 - olakeul teugsumunja chihwan

REPLACE 엔터값 제거

REPLACE(REPLACE(대상컬럼, CHAR(13), ''), CHR(10), '')

컬럼의 엔터값을 제거하기 위해서는 오라클의 CHAR함수를 사용해야 합니다.

DB툴에서는 공백이나, 엔터가 적용된 부분이 조회했을때에는 모르는 경우가 있습니다.

테스트로 컬럼에 공백을 넣고 쿼리를 조회해보겠습니다.

Oracle SQL Developer 툴에서는 엔터를 넣었지만 데이터로는 차이가 보이지 않습니다.

하지만 더블클릭으로 데이터를 보면은 실제로는 엔터가 입력되어있는것을 확인할 수 있습니다.

오라클 특수문자 치환 - olakeul teugsumunja chihwan
SELECT COL08 as str
     , REPLACE(REPLACE(COL08, CHR(13), ''), CHR(10), '') AS restr
FROM TEMP1018;

오라클 특수문자 치환 - olakeul teugsumunja chihwan
오라클 특수문자 치환 - olakeul teugsumunja chihwan

아래 CHR 함수로 유용하게 사용할 수 있습니다.

CHR(9) : 탭문자

CHR(10) : 줄바꿈(라인피드)

CHR(13) : 행의 처음(캐리지리턴)

CHR(38) : &

CHR(39) : '(따옴표)

CHR44) : 쉼표

REPLACE 탭제거

REPLACE(대상컬럼, CHAR(9), '')

SELECT COL08 as str
     , REPLACE(COL08, CHR(9), '') AS restr
FROM TEMP1018;

조회 화면에서 에러가 나길래 확인해보니 DB에 특수문자가 있었다.

DB에 있던 특수문자
->

저" r"이 무엇인지 한참을 찾다가 ascii 코드값을 찾는 방법을 알게 되었다.
그래서 코드값을 찾아보니

오라클 특수문자 치환 - olakeul teugsumunja chihwan
에 해당하는 기호였다.

ASCII 코드 값을 찾고 해당 코드 값 제거 방법!

1. ASCII 함수를 사용해 코드값 찾기
사용법 : ASCII('문자')

오라클 특수문자 치환 - olakeul teugsumunja chihwan

2.replace 함수를 사용해 값 치환
사용법 : chr(문자)
replace(A, B, C)
A : 확인해야할 문자 혹은 컬럼명
B : 변경해야할 문자
C : 바꿀 문자

오라클 특수문자 치환 - olakeul teugsumunja chihwan

할렐루야!! 이게 어떤 문자인지 알게 되어 좋은것도 잠시...
도대체 정보 입력 시 어떻게 저런 값을 넣게 됬는지 미궁에 빠졌고...이런 건이 한 둘이 아니라..아예 들어오는 특수문자 제거를 어떻게 할지 찾아보았다.

오라클 특수문자 제거 방법!

오라클 특수문자 치환 - olakeul teugsumunja chihwan

(1).regexp_replace 함수 사용해 영문자 아닌값 확인
regexp_replace (컬럼명, 패턴)
오라클 정규식이라고 불리는 이 함수를 사용해 특정 패턴이 보이면 값을 치환하도록 하였다.
즉, 특수문자 패턴이 들어오면 빈값으로 치환할 수 있다!

(2).TRANSLATE 함수 사용해 특수문자 치환
(3).replace 함수 사용해 빈값 치환

할매도 코딩한다

Oracle

[Oracle] 문자열 변환 (REPLACE 함수) 엔터, 탭 제거

꾹꾹이 2021. 10. 26. 14:04

REPLACE 함수
REPLACE(컬럼명, '찾을문자', '변환문자')

오라클에서 특정 문자열을 치환하거나 제거하기 위해서는 REPLACE() 함수를 사용하면 된다.

단순 문자열 치환 외에도 엔터값 제거나 <br/>태그를 엔터값 치환에도 많이 사용된다. 

오라클 10g 부터 정규식 사용이 가능한 REGEXP_REPLACE()함수가 추가 되었다.

특정문자 치환

REPACE(TEXT, 'NAME', 'NM')

WITHTEST AS (
                    SELECT'Google Store' NM FROM DUAL
)
SELECT A.NM ,
          REPLACE(A.NM, 'Store', 'STORE') RE_NM
FROMTEST A
오라클 특수문자 치환 - olakeul teugsumunja chihwan
특정문자 제거

REPLACE(TEXT, 'Sol', '')

WITH TEST AS (
              SELECT'Google Store' NM FROM DUAL
)
SELECTA.NM ,      
          REPLACE(A.NM, 'Store', 'STORE') RE_NM
FROMTEST A
오라클 특수문자 치환 - olakeul teugsumunja chihwan
엔터값 제거

REPLACE(REPLACE(대상컬럼, CHAR(13), ''), CHR(10), '')

WITHTEST AS (
              SELECT 'Google' || CHR(13)||CHR(10) || 'Store' NM FROM DUAL
)
SELECTA.NM ,      
         REPLACE(REPLACE(A.NM, CHR(13), ''), CHR(10), '') RE_NM
FROMTEST A
오라클 특수문자 치환 - olakeul teugsumunja chihwan

- 엔터값을 제거하기 위해서는 replace함수를 두번 사용해야 정확히 제거된다

- 윈도우에서 엔터값은 chr(13)chr(10)이며 리눅스에서 엔터값은 chr(10)으로 사용된다

탭문자 제거

REPLACE(TEXT, chr(9), '')

WITHTEMP AS (
              SELECT'Steven' || CHR(9) || 'King' NM FROM DUAL
)
SELECTA.NM ,
          REPLACE(A.NM, CHR(9), '') RE_NM
FROMTEMP A
오라클 특수문자 치환 - olakeul teugsumunja chihwan

- 오라클에서 탭문자는 chr(9)를 사용한다

--<br/>태그 엔터값으로 치환

REPLACE(TEXT, '<br/>', chr(13)||chr(10))

- <br/>태그 치환시 대문자, 소문자를 구분하기 때문에 유의해야 한다

- <br>, <BR/> 등 경우의 수가 많다면 여러번 치환하는게 좋다