정규 표현식 (Regular Expression)
REGEXP_LIKE 정규식 패턴을 검색, LIKE 연산과 유사
REGEXP_REPLACE 정규식 패턴을 검색, 대체 문자열로 변경
REGEXP_INSTR 정규식 패턴을 검색, 위치를 반환
REGEXP_SUBSTR 정규식 패턴을 검색, 부분 문자 추출
REGEXP_COUNT 정규식 패턴을 검색, 발견된 횟수 반환
메타문자 : 검색 알고리즘을 지정하는 연산자.
리터럴 문자 : 검색중인 일반적인 문자.
. 임의의 한 문자
? 앞 문자가 없거나 하나 있음 ( 0 또는 1번 발생 )
+ 앞 문자가 하나 이상 있음
* 앞 문자가 0개 이상 있음
{m} 선행 표현식의 m번 발생
{m,} 선행 표현식의 최소 m번 이상 발생
{m,n} 선행 표현식이 최소 m번 이상, 최대 n번 이하 발생
[...] 괄호 안의 리스트에 있는 임의의 단일 문자와 일치
| OR
(...) 괄호로 묶인 표현식을 한 단위로
^ 문자열 시작 부분과 일치 // ~로 시작
[^] 해당 문자에 해당하지 않는 한 문자
$ 문자열의 끝 부분과 일치 // ~로 끝남
\ 표현식에서 후속 문자를 리터럴(일반 문자)로 처리
\n 괄호 안에 그룹화 된 n 번째 (1-9) 선행 하위식과 일치
\d 숫자 문자
[:class:] 지정된 POSIX 문자 클래스에 속한 임의의 문자와 일치
[:alpha:] 알파벳문자 [:digit:] 숫자 [:lower:] 소문자 알파벳 문자 [:upper:] 대문자 알파벳 문자
[:alnum:] 알파벳/숫자 [:space:] 공백 문자 [:punct:] 특수 문자 [:cntrl:] 컨트롤 문자 [:print:] 출력 가능한 문자
[^:class:] 괄호안의 리스트에 없는 임의의 단일 문자와 일치
REGEXP_LIKE(검색_값, 패턴, .. 매치_옵션)
REGEXP_SUBSTR(검색_값, 패턴1, 패턴2, 위치, 특정_문자, 매치_옵션)
REGEXP_REPLACE(검색_값, 패턴, 대체_값, 위치, 발생, 매치_옵션)
제품의 이름 중, SS시작하며 P를 포함하지 않은 제품
select product_name from product_information
where REGEXP_LIKE (product_name, 'SS[^P]')
// ^ ~로 시작 $ ~로 끝남
제품의 이름 중, SS시작하며 P나 S로 이어지는 제품
select product_name from product_information
where REGEXP_LIKE (product_name, 'SS[PS]')
제품의 이름 중, SS시작하며 P부터 S까지의 제품
select product_name from product_information
where REGEXP_LIKE (product_name, 'SS[P-S]')
// [a-z] (a~z 중 하나) / [a..f] (a로 시작되고 f로 끝나는 총 4자리 문자)
// ^[^a-f] (a~f 로 시작하지 않음) / ^[PS] (P나 S로 시작)
■ 하나라도 숫자가 아닌것이 있으면 선택, REGEXP_LIKE(ID, ‘[^[:digit:]]’)
■ 하나라도 숫자를 포함하는 문자열, REGEXP_LIKE(ID, ‘[[:digit:]]’)
■ 알파벳이 아닌 문자를 포함하는 문자열, REGEXP_LIKE(ID, ‘[^[:alpha:]]’)
■ ‘1’뒤에 ‘q’를 포함하는 문자열, REGEXP_LIKE(ID, ‘1[q]’)
■ ‘1’뒤에 ‘2’이나 ‘q’를 포함하는 문자열, REGEXP_LIKE(ID, ‘1[2q]’) 또는 REGEXP_LIKE(ID, ‘1[q2]’)
■ ‘1qw’뒤에 ‘2’가 없는 문자열, REGEXP_LIKE(ID, ‘1qw[^2]’)
■ ‘1’뒤에 ‘2’가 있는 문자열, ‘1’과 ‘2’사이에 문자가 있거나 없거나 상관없음,
REGEXP_LIKE(ID, ‘[1]?[2]’) 또는 REGEXP_LIKE(ID, ‘[1]*[2]’)
■ 문자로만 조합된 문자열, REGEXP_LIKE(ID, ‘^[^0-9]*$’) 또는 NOT REGEXP_LIKE(ID, ‘[0-9]’)
■ 숫자로만 조합된 문자열 , REGEXP_LIKE(ID, ‘^[0-9]*$’) 또는 NOT REGEXP_LIKE(ID, ‘[^0-9]’)
■ 영문 대문자, 소문자, 숫자로만 조합된 문자열, REGEXP_LIKE(ID, ‘^[A-Za-z0-9]*$’)
■ 알파벳만 존재하는 문자열, REGEXP_LIKE(ID, ‘^[[:alpha:]]*$’)
■ 특수문자를 포함하는 문자열, REGEXP_LIKE(ID, ‘[[:punct:]]’)
■ 특수문자만 존재하는 문자열, REGEXP_LIKE(ID, ‘^[[:punct:]]*$’)
■ 한글을 포함하는 문자열, REGEXP_LIKE(id, ‘[가-힝]’)
■ 한글만 존재하는 문자열, REGEXP_LIKE(id, ‘^[가-힝]*$’)
■ 숫자가 연속으로 2개이상인 문자열, REGEXP_LIKE(id, ‘[0-9]{2}’)
■ 숫자나 소문자로 시작하는 문자열, REGEXP_LIKE(id, ‘^[0-9]|^[a-z]’)
■ 숫자로 시작하지 않는 문자열, REGEXP_LIKE(id, ‘^[^0-9]’)
■ 숫자나 소문자로 끝나는 문자열, REGEXP_LIKE(id, ‘[0-9]$|[a-z]$’)
■ 특수문자 ‘!’나 ‘*’가 들어가는 행, REGEXP_LIKE(id, ‘\!|\*’)
select cust_email, REGEXP_SUBSTR(cust_email, '[^@]+') "CUST_ID" from customers
where nls_territory = 'ITALY'
and rownum <= 5;
CUST_EMAIL CUST_ID
Margret.Powell@ANI.COM Margret.Powell
Margrit.Garner@STILT.COM Margrit.Garner
Maria.Warden@TANAGER.COM Maria.Warden
select REGEXP_REPLACE('Oracle is the data information company','(){2,}',' ') from dual;
REGEXP_REPLACE('ORACLEISTHEDATAINFORMATIONCOMPANY','(){2,}','')
O r a c l e i s t h e d a t a i n f o r m a t i o n c o m p a n y
select REGEXP_REPLACE('Oracle is the data information company','( ){2,}',' ') from dual;
REGEXP_REPLACE('ORACLEISTHEDATAINFORMATIONCOMPANY','(){2,}','')
Oracle is the data information company
전화번호 표기법 변경 ( 650.507.9833 => 650)507-9833 으로 변경 )
select phone_number,
REGEXP_REPLACE(phone_number, '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})', '\1) \2-\3') "NEW_PHONE_NUM" from employees;
// [[:digit:]]{3} 10 진수 세 자리, \. 은 . 이 부호라는 의미 <= \n, \t, \(, \), ...
제약 조건 (CONSTRAINTS) (0) | 2022.06.07 |
---|---|
테이블 분할, 복사 (연도 별 등 기준), 날짜 자동 입력 (0) | 2022.06.07 |
Oracle 분석 함수, 집합 함수 (0) | 2022.06.07 |
Oracle 날짜 함수, 변환 함수 (0) | 2022.06.07 |
Oracle 함수 (숫자 함수, 문자 함수) 및 명령어 (0) | 2022.06.07 |