All thing of the world!

Oracle REGEXP_REPLACE 설명 : 오라클 함수 본문

IT/Oracle DBMS

Oracle REGEXP_REPLACE 설명 : 오라클 함수

WorldSeeker 2021. 3. 31. 09:17

1. 함수의 목적

   
Oracle REGEXP_REPLACE는 문자열에서 정규 표현식 패턴을 검색하여 원하는 패턴으로 변경하여 리턴한다.
    기본적으로 함수는 replace_string으로 바뀐 정규식 패턴이 나타날 때마다 source_char를 반환한다.

2. 샘플을 통한 개념 퀵뷰

phone_number를 검사하여 xxx.xxx.xxxx 패턴을 찾아, 패턴을 (xxx) xxx-xxxx로 다시 포맷한다.

SELECT
REGEXP_REPLACE(phone_number,
'([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
'(\1) \2-\3') "REGEXP_REPLACE"
FROM employees
ORDER BY "REGEXP_REPLACE";

REGEXP_REPLACE
--------------------------------------------------------------------------------
(515) 123-4444
(515) 123-4567
(515) 123-4568
(515) 123-4569
(515) 123-5555
. . .


3. 사용방법 


4. 함수 PARAMETER 설명 

  첫 번째 인수가 LOB가 아닌 경우 함수는 VARCHAR2를 리턴하고 첫 번째 인수가 LOB 인 경우 CLOB를 리턴한다.

[source_char]
source_char는 검색할 소스 문자열이다.
일반적으로 문자열이며 CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB 또는 NCLOB 데이터 유형이 될 수 있다.


[pattern]
pattern은 정규식으로 입력한다.
일반적으로 텍스트이며 CHAR, VARCHAR2, NCHAR 또는 NVARCHAR2 데이터 유형 중 하나이며, 최대 512 바이트까지 포함 할 수 있다.
pattern의 데이터 유형이 source_char의 데이터 유형과 다른 경우 pattern을 source_char의 데이터 유형으로 변환한다.


[replace_string]
replace_string은 CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB 또는 NCLOB 데이터 유형 중 하나가 올 수 있으며, 변경한 패턴을 입력한다.

[position]
position은 검색을 시작해야 하는 source_char의 위치를 나타내는 양의 정수이다.
기본값은 1로, Oracle이 source_char의 첫 문자에서 검색을 시작함을 의미한다.


[occurrence]
occurrence는 source_char에서 검색해야 하는 패턴의 발생횟수를 나타내는 양의 정수이다.
기본값은 1이며, 1이라면 pattern의 첫 번째 항목을 찾는다.
occurrence가 1보다 크면, pattern의 첫 번째 발생 다음에 나오는 두번째 발생위치를 검색한다.
이 동작은 첫번째 발생의 두번째 문자부터 두번째 발생을 검색하기 시작하는 INSTR 함수와 다르다.

[match_param]
match_param은 함수의 기본 일치 동작을 변경할 수  있다.

match_param에 대해 다음 값 중 하나 이상을 지정할 수 있다.
- 'i'는 대소문자를 구분하지 않는다.
- 'c'는 대소문자를 구분한다.
- 'n'은 마침표 (.)와 일치하는 모든 문자를 줄 바꿈 문자와 일치시킨다. 이 매개변수를 생략하면 마침표는 개행문자로 보지 않는다.
- 'm'은 소스 문자열을 여러 줄로 취급한다. 
 이 매개 변수를 생략하면 소스 문자열을 단일 행으로 취급한다.
- 'x'는 공백 문자를 무시한다.

 여러 개의 모순된 값을 지정하면 Oracle은 마지막값을 사용합니다. 예를 들어, 'ic'를 지정하면, 'c'를 적용하여 대소문자를 구분한다. 위에 표시된 문자 이외의 문자를 지정하면 오라클은 오류를 반환한다.

match_param에 아무 것도 적지 않게 되면,
- 대소문자 구분은 NLS_SORT 매개 변수의 값에 의해 결정된다.
- 마침표 (.)가 개행문자로 보지 않는다.
- 소스문자열은 단일행으로 처리된다


5. 다양한 샘플표현

example1)  country_name 컬럼의 문자열의 문자 뒤에 각각 공백을 넣는다.

SELECT
REGEXP_REPLACE(country_name, '(.)', '\1 ') "REGEXP_REPLACE"
FROM countries;

REGEXP_REPLACE
--------------------------------------------------------------------------------
A r g e n t i n a
A u s t r a l i a
B e l g i u m
B r a z i l
C a n a d a
. . .


example2) 두개 이상의 공백을 찾고, 하나의 공백으로 대체한다.

SELECT
REGEXP_REPLACE('500      Oracle     Parkway,        Redwood Shores, CA',
'( ){2,}', ' ') "REGEXP_REPLACE"
FROM DUAL;


REGEXP_REPLACE

--------------------------------------
500 Oracle Parkway, Redwood Shores, CA

 

Comments