All thing of the world!

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

IT/Oracle DBMS

Oracle REGEXP_INSTR 설명 : 오라클 함수

WorldSeeker 2021. 3. 31. 08:59

1. 함수의 목적

    Oracle REGEXP_INSTR은
문자열에서 정규 표현식 패턴을 검색하여, return_option 인수의 값에 따라 일치하는 부분 문자열의 시작 또는 끝 위치를 나타내는 정수를 리턴한다.
  일치하는 항목이 없으면 함수는 0을 반환합니다.


2. 샘플을 통한 개념 퀵뷰

 하나 이상의 공백이 아닌 문자가 있는지 찾는다. 
 문자열의 첫 번째 문자에서 검색을 시작하여, 여백이 아닌 문자가 하나 이상 나오는 여섯 번째 시작위치를 반환한다.


SELECT
REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
'[^ ]+', 1, 6) "REGEXP_INSTR"
FROM DUAL;

REGEXP_INSTR
------------
37


3. 사용방법 


4. 함수 PARAMETER 설명 

[source_char]
source_char는 검색할 소스문자열을 입력하는 입력 파라미터이다.
일반적으로 문자열이며 CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB 또는 NCLOB 데이터 유형 중 하나가 될 수 있다.

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

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

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


[return_opt]
반환값에 대한 조정을 위한 파라미터로 아래와 같다.
- 0  : 기본값으로, 첫번째 검색 위치를 리턴한다.
- 1 : 첫번재 검색 다음의 문자 위치를 리턴한다.


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

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

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

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


[subexpr]
서브 표현식이 있는 패턴의 경우 subexpr은 패턴의 하위표현식이 함수의 검색대상인지 나타내며, 0에서 9까지의 정수로 표현한다.
subexpr은 괄호로 묶인 패턴 조각이며, 하위 표현식은 중첩될 수 있다.
하위 표현식은 왼쪽 괄호가 나타나는 순서대로 번호가 매겨진다.
예를 들어, 다음 표현식을 보자.

0123(((abc)(de)f)ghi)45(678)

이 표현식에는 "abcdefghi"다음에 "abcdef", "abc", "de"및 "678"순으로 5 개의 서브 표현식이 있다.
subexpr이 0이면 패턴과 일치하는 전체 하위문자열의 위치를 반환한다.
subexpr이 0보다 큰 경우 일치하는 하위문자열의 하위표현식 번호에 해당하는 하위 문자열의 위치가 반환된다.
pattern에 subexpr 하위 표현식이 없으면 함수는 0을 반환한다.
null subexpr 값은 NULL을 반환한다. subexpr의 기본값은 0이다.


5. 다양한 샘플표현

example1) 문자열의 세번째 문자에서 검색을 시작하고 대소문자에 관계없이 s, r 또는 p로 시작하는 7 자 단어가 두 번째 나오는 문자의 문자열의 위치를 반환한다.

SELECT
REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
'[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'i') "REGEXP_INSTR"
FROM DUAL;

REGEXP_INSTR
------------
28

Comments