일단 해보는 코딩/Oracle SQL

[오라클/SQL] 정규 표현식

eun_zoey2 2022. 6. 3. 14:46
728x90

정규 표현식

숫자, 문자, 기호 등을 주어진 패턴으로 찾아내서 적용시키는 기법이다.
대부분 C, C++, ShellScript, Python, Java, ... 등의 프로그래밍 언어와 데이터 베이스의 PL/SQL사용된다.
^(~로 시작), $(~로 끝남)
[a-z] -> a~z 중 하나,
[a..f]-> a로 시작하고 f로 끝나는 총 4자리 문자,
^[a-f] -> a~f로 시작되지 않음,
[^ps] -> p나 s로 시작

LIKE

LIKE 연산자는 특정 패턴을 포함하는 데이터만을 검색하기 위해 사용한다.

Q. Employees 테이블에서 'K'으로 시작하는 이름(Name) 출력하시오.

SELECT * FROM EMmployees;
WHERE last_Name LIKE 'K%';

REGEXP

LIKE 연산자보다 더욱 복잡한 패턴을 검색하고 싶을 때는 REGEXP 연산자를 사용할 수 있다.
REGEXP 연산자는 정규 표현식을 토대로 하는 패턴 매칭 연산을 제공한다.

구분 배열 설명
REGEXP_LIKE 검색_값, 패턴, .. 매치_옵션 색_값은 검색할 문자열, 패턴은 검색할 특정 문자,
매치_옵션은 찾고자 하는 문자
REGEXP_SUBSTR( 검색_값, 패턴1, 패턴2, .. 매치_옵션 문자열에서 일부를 추출하고, 위치는 디폴트값으로 한다.
REGEXP_REPLACE 검색_값, 패턴, 대체_값, 위치, 발생, 매치_옵션  


Q.제품의 이름 중에서 SS로 시작되면서, P를 포함하지 않는 제품을 찾아 보시오.

select product_name  from product_information
where REGEXP_LIKE(product_name, 'SS[^P]');


Q. 제품의 이름 중에서 SS로 시작되면서 P나 S로 이어지는 제품을 찾아 보시오 .

select product_name  from product_information
where REGEXP_LIKE(product_name, 'SS[PS]');


Q. customers 테이블에서 cust_first_name이 대문자A,소문자a 로 시작되지 않는 고객을 보이시오.

select cust_first_name from customers
where REGEXP_LIKE (cust_first_name, '^[Aa]');


Q. 고객의 cust_email 5개만 보이시오.

select cust_email from customers
where rownum <=5;


Q. 고객의 cust_email @앞에서 부터 5개만 보이시오.

select cust_email, REGEXP_SUBSTR(cust_email, '[^@]+' ) "CUST_ID" from customers
where nls_territory = 'ITALY'
and rownum <=5;