REGEXP_REPLACE 함수 Example
REGEXP_REPLACE 함수란?
REPLACE함수를 확장한 개념으로 주어진 문자열에서 특정 정규패턴을 찾아서 지정한 문자열로 변경하는 함수
REGEXP_REPLACE 문법
REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )
source_string
- 검색할 컬럼명, 문자열
pattern
- 찾고자 하는 정규식 패턴
replace_string
- (선택) 변경하고자하는 문자열, 기본값은 빈 문자열("")
position
- (선택) 검색시작위치, 기본값 1
parameters
- (선택) 기본값 c
- c - 대소문자 구분 검색
- i - 대소문자 구분 하지 않고 검색 (구분x)
- m - 검색조건 여러줄
정규식문법
. | 하나의 문자를 의미합니다. ".*"하면 한개이상의 문자 즉 모든 문자를 의미합니다. |
$ | 끝을 의미한다. AAA$ 하면 AAA로 끝나는 것을 의미한다. |
\ | 특수 문자를 문자로 인식할때 사용합니다. |
¦ | 여러 식 중에서 하나를 선택합니다. SQL의 OR조건과 같습니다. "abc¦adc"는 abc와 adc 문자열을 모두 포함한다. |
^ | 문자 클래스 안의 문자를 제외한 나머지를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않습니다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미한다. |
[] | "["과 "]" 사이의 문자 중 하나를 선택한다. "¦"를 여러 개 쓴 것과 같은 의미이다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 의미한다. |
() | 여러 식을 하나로 묶을 수 있다. "abc¦adc"와 "a(b¦d)c"는 같은 의미를 가진다. |
* | 0개 이상의 문자를 포함한다. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다. |
+ | "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다. [+ 앞 내용 기준] |
? | "a?b"는 "b", "ab"를 포함한다. [? 다음 내용 기준] |
{m} | "a{3}b"는 "aaab"만 포함한다. |
{m,} | "a{2,}b"는 "aab", "aaab", "aaaab"를 포함한다. "ab"는 포함되지 않는다. |
{m, n} | "a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않는다 |
\n | 1에서 9까지의 숫자를 의미 |
\d | Matches a digit character. |
\D | Matches a nondigit character. |
\w | Matches a word character. |
\W | Matches a nonword character. |
\s | Matches a whitespace character. |
\S | matches a non-whitespace character. |
Class 문법
[:alnum:] | 영어와 숫자 |
[:alpha:] | 알파벳, [A-Za-z] |
[:blank:] | 공백과 탭 |
[:digit:] | 숫자 |
[:lower:] | 소문자, [a-z] |
[:punct:] | 특수문자 |
[:space:] | 공백(스페이스) |
[:upper:] | 대문자, [A-Z] |
[가-힣] | 한글전체 |
출처 : https://nicola-ml.tistory.com/57
REGEXP_REPLACE 사용예제
단어에서 모든 숫자를 특수문자(*)로 변경하기
REGEXP_REPLACE(컬럼명, '[[:digit:]]', '*')
숫자를 찾아 뒤에 -*를 추가하기
REGEXP_REPLACE(컬럼명, '([0-9])', '\1-#$')
숫자 중간에 . / IP. 삭제하기
REGEXP_REPLACE(컬럼명, '\.', '')
공백 N칸이상 일때 특수문자로 변경하기
( ) -> \s 사용가능 [위의 정규식문법참조]
REGEXP_REPLACE('AAA BBB', '( ){2,}', '*') AS "공백 1칸"
REGEXP_REPLACE('AAA BBB', '( ){2,}', '*') AS "공백 2칸"
REGEXP_REPLACE('AAA BBB', '\s{2,}', '*') AS "공백 3칸"
특정문자열 형태를 다른 형태 변경하기
[[:digit:]] -> \d 사용가능 [위의 정규식문법참조]
REGEXP_REPLACE(컬럼명, '([[:digit:]]{4})(\d{2})(\d{2})', '\1-\2-\3') AS "그룹뒤 문자삽입"
특정문자열 형태를 다른 형태 변경하기
[[:digit:]] -> \d 사용가능 [위의 정규식문법참조]
REGEXP_REPLACE(컬럼명, '([[:digit:]]{4})(\d{2})(\d{2})', '\2*\1-\3') AS "그룹뒤 문자삽입1"
REGEXP_REPLACE(컬럼명, '([[:digit:]]{4})(\d{2})(\d{2})', '\3-\2') AS "그룹뒤 문자삽입2"
REGEXP_REPLACE(컬럼명, '([[:digit:]]{4})(\d{2})(\d{2})', '&\1-\2%\3') AS "그룹뒤 문자삽입3"
'DB > Oracle' 카테고리의 다른 글
[Oracle] LAST_DAY 함수 Example (0) | 2024.03.11 |
---|---|
[Oracle] REVERSE 함수 Example (0) | 2024.03.11 |
[Oracle] Case 표현식 Example (0) | 2024.01.18 |
[Oracle] 자리수 올림, 내림, 반올림, 버림 Example (0) | 2024.01.18 |
[Oracle] MONTHS_BETWEEN 함수 Example (0) | 2024.01.18 |