정규 표현식(Regular Expression)
- Oracle 10g에서 새로 도입
1. REGEXP_LIKE 함수
- 문법 : REGEXP_LIKE (srcstr, pattern [, match_option ] )
- scrstr : 검색하고자 하는 값
- pattern : Regualr Expression Operation
- match_option : 찾고자 하는 문자의 대소문자 구분이 기본으로 설정되어 있다. 대소문자를 구분할 필요가 없다면 'i' 옵션 사용을 지정한다.
SELECT ADDR1
FROM 주소테이블
WHERE REGEXP_LIKE (ADDR1, '불광[^2]');
[^expression] => expression이 부정되는 경우 즉 '2'를 포함하는 주소는 제외.
SELECT NAME
FROM 회원테이블
WHERE REGEXP_LIKE (NAME, '김대[희권]');
[expression] => 김대 다음 '희' 또는 '권' 을 포함하는 이름을 찾는다.
2. REGEXP_SUBSTR 함수
- 문법 : REGEXP_SUBSTR( srcstr, pattern [, position[, occurrence [,match_option]]])
- position : 특정 문자를 어디서 찾아야 하는지 위치를 나타낸다 (default 1)
- occurrence : 검색하고자 하는 문자열에서 특정 문자의 발생 pattern (default 1)
ex)1 email 중 아이디만 얻고자 할때
SELECT EMAIL, REGEXP_SUBSTR(EMAIL, '[^@]+') AS SUBEMAIL
FROM 회원테이블;
email | subemail |
test@test.co.kr | test |
gogosing@nate.com | gogosing |
goddamn@gmail.com | goddamn |
3. REGEXP_REPLACE 함수
- 문법 : REGEXP_REPLACE( srcstr, pattern [,replacestr [, posision [, occurrence [, match_option ]]]])
- replacestr : 대체하고자 하는 문장
ex)1 공백이 실수로 2개이상 작성된 내용을 1개의 공백으로 치환해주기.
with testStr as (
select 'God Damn!!' as 문장 from dual
union all
select 'Nice Play !!' as 문장 from dual
)
select REGEXP_REPLACE(문장, '( ){2,}', ' ') AS 문장
from testStr;