Continuous Challenge

[불친절한 SQL 프로그래밍] [24장] 정규 표현식(2) (REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR, REGEXP_INSTR, REGEXP_COUNT) 본문

Study/불친절한 SQL 프로그래밍

[불친절한 SQL 프로그래밍] [24장] 정규 표현식(2) (REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR, REGEXP_INSTR, REGEXP_COUNT)

응굥 2019. 12. 18. 17:01
728x90
728x90

756P

 

REGEXP_LIKE 조건

REGEXP_LIKE 조건은 source_char가 pattern과 일치하면 TRUE, 일치하지 않으면 FALSE를 반환한다. 

REGEXP_LIKE(source_char, pattern [, match_param])
매개변수 설명
source_char 검색 문자열
pattern 검색 패턴
match_param 일치 옵션

아래의 일치 옵션을 사용할 수 있다. 기본값은 c다. icnmx 형식으로 다수의 옵션을 합께 지정할 수도 있다.

옵션 설명
i 대소문자 무시
c 대소문자 구분
n dot(.)를 개행 문자와 일치
m 다중 행 모드 (앵커(^,$)에 영향)
x 검색 패턴의 공백 문자를 무시

first_name 값이 Ste로 시작하고 v나 ph 다음에 en으로 끝나는 행을 검색한다.
last_name 값에 [aeiou]가 연속되는 패턴이 존재하는 행을 검색한다.
CHECK 제약조건에 REGEXP_LIKE 함수를 활용할 수 있다. 아래의 CHECK 제약조건은 유효한 전화번호의 패턴을 검사한다. p_number 열에 '(숫자3자리) 숫자3자리-숫자4자리' 패턴과 일치하는 전화번호만 저장된다.
두 번째 쿼리는 "ORA-02290 : 체크 제약조건(SCOTT.C_CONTACTS_PNF)이 위배되었습니다" 에러가 발생한다.

 

REGEXP_REPLACE 함수

REGEXP_REPLACE 함수는 source_char에서 일치한 pattern을 replace_string으로 변경한 문자 값을 반환한다.

REGEXP_REPLACE(source_char, pattern [, replace_string [, position [, occurrence [, match_param]]]])
매개변수 설명
source_char 검색 문자열
pattern 검색 패턴
replace_string  변경 문자열
position 검색 시작 위치 (기본값은 1)
occurrence 패턴 일치 횟수 (기본값은 1)
match_param 일치 옵션

'숫자3자리.숫자3자리.숫자4자리' 패턴을 '(첫 번째 일치) 두 번째 일치 - 세 번째 일치' 형식으로 변경한다. 일치한 패턴이 없으면 원본 값을 반환한다.
한 문자를 문자 뒤 공백이 있는 동일한 문자로 변경한다.
연속된 공백을 하나의 공백으로 변경한다. '( ){2,}' 패턴 대신 ' +' 패턴을 사용해도 동일한 결과를 얻을 수 있다.
역 참조를 사용하여 'first middle last' 패턴의 이름을 'last, first middle' 형식으로 변경한다.

 

REGEXP_SUBSTR 함수

REGEXP_SUBSTR 함수는 source_char에서 일치한 pattern을 반환한다.

REGEXP_SUBSTR(source_char, pattern [, position [, occurence [, match_param [, subexpr]]]])
매개변수 설명
source_char 검색 문자열
pattern 검색 패턴
position 검색 시작 위치 (기본값은 1)
occurrence 패턴 일치 횟수 (기본값은 1)
match_param 일치 옵션
subexpr 서브 표현식 (0은 전체 패턴, 1 이상은 서브 표현식, 기본값은 0)

URL 패턴과 일치한 문자열을 반환한다.
일치한 서브 표현식을 반환한다.
c1열은  dot(.)를 개행 문자와 일치시켰기 때문에 패턴이 일치한다. c2열은 다중 행 모드로 동작하기 때문에 둘째 줄 ac와 일치한다. c3열은 검색 패턴의 공백 문자를 무시하기 때문에 패턴이 일치한다.

 

REGEXP_INSTR 함수

REGEXP_INSTR 함수는 source_char에서 일치한 pattern의 시작 위치를 정수로 반환한다.

REGEXP_INSTR(source_char, pattern [, position [, occurence [, return_opt [, match_param [, subexpr]]]]])
매개변수 설명
source_char 검색 문자열
pattern 검색 패턴
position 검색 시작 위치 (기본값은 1)
occurrence 패턴 일치 횟수 (기본값은 1)
return_opt 반환 옵션 (0은 시작 위치, 1은 다음 위치, 기본값은 0)
match_param 일치 옵션
subexpr 서브 표현식 (0은 전체 패턴, 1 이상은 서브 표현식, 기본값은 0)

c1 열은 공백 문자로 구분된 여섯 번째 문자열(CA)의 시작 위치를 반환한다. c2열은 s나 r이나 p로 시작하는 7자리 영문 문자열을 검색한다. 두 번째로 일치한 문자열(Redwood)의 다음 위치를 반환한다.
서브 표현식의 시작 위치를 반환한다.

 

REGEXP_COUNT 함수

REGEXP_COUNT 함수는 source_char에서 일치한 pattern의 횟수를 반환한다.

REGEXP_COUNT(source_char, pattern [, position [, match_param]])
매개변수 설명
source_char 검색 문자열
pattern 검색 패턴
position 검색 시작 위치 (기본값은 1)
match_param 일치 옵션

c1열은 대소문자를 구분하지 않기 때문에 3회, c2열은 대소문자를 구분하기 때문에 2회 일치한다.

728x90
728x90
Comments