정규식함수로 다양한 조건 조회
- 정규식
^ | 해당 문자로 시작하는 line 출력 |
$ | 해당 문자로 끝나는 line 출력 |
. | apple -> a...p : a로 시작하여 p로 끝나는 line ( . -> 1character) |
* | 모든 이라는 뜻. 글자수가 0일수도 있음. |
[ ] | 해당 문자에 해당하는 한 문자 |
[^] | 해당 문자에 해당하지 않는 한 문자 |
[:문자클래스:]
alpha : 모든 알파벳
blank : 공백
cntrl
digit : 숫자
graph
lower : 소문자
space
upper : 대문자
xdigit
- REGEXP_LIKE : 특정 패턴과 매칭되는 결과를 검색
EX1. 영문자가 들어가 있는 행만 출력
regexp_like(text, '[a-z]') --소문자
regexp_like(text, '[A-Z]') --대문자
regexp_like(text, '[a-zA-Z]') --소문자, 대문자
EX2. 소문자로 시작하고 공백을 포함하는 경우
regexp_like(text, '[a-z] ') --소문자로 시작하고, 공백이 있는행
regexp_like(text, '[a-z] [0-9]') --소문자로 시작 + 공백1칸 포함 + 숫자로 끝나는 행
regexp_like(text, '[[:space;]]') --공백이 있는 데이터를 모두 찾음.
EX3. 연속적인 글자 수 지정
regexp_like(text, '[A-Z]{2}') --대문자가 연속으로 2글자 오는 경우
regexp_like(text, '[a-z]{3}') --소문자가 연속으로 3글자 오는 경우
regexp_like(text, '[A-Z][0-9]{3}') -- 대문자와 숫자가 각각 3글자씩 오는 경우
regexp_like(text, '[[:upper:]]') --대문자가 들어가는 모든행. = regexp_like(text, '[A-Z]')
EX4. 특정 위치를 지정하여 출력 ( 시작하는 문자지정 : ^ / 끝나는 문자지정 : $ )
regexp_like(text, '^[A-Za-z]') -- 대문자나 소문자로 시작하는 행을 모두 출력
regexp_like(text, '^[a-z]|^[0-9]') --소문자로 시작하거나 숫자로 시작하는 행 출력
regexp_like(text, '^s(a|t)') --s로 시작하고 두번째 글짜가 a나 t가 오는 행 출력
regexp_like(text, '[[:alpha:]]$') --영어로 끝나는 모든행. = regexp_like(text, '[a-zA-Z]$')
regexp_like(text, '[^a-z]') --대괄호 안의 문자가 아닌 행
regexp_like(text, '^[^a-z]') --대괄호 안의 문자가 아닌 문자로 시작하는 행
regexp_like(text, '[a|z]') --a나 z가 포함되어 있는 행을 모두 출력
regexp_like(text, '[0-9]{2} \) [0-9]{3}') --02)333. 전화번호 지역번호
regexp_like(text, '^...v.') -- 4번째 자리에 v가 있는 행 출력
regexp_like(text, '^[10]{2} \. [10]{2} \. [10]{2}') --10.01.01.xxx([]안에 순서 상관없음) ip주소 찾을때
NOT regexp_like(text, '^[A-Za-z]') --특정조건을 제외한 모든행 출력
EX5. 특수문자 찾기
- 메타캐릭터 조심
- 탈출문자 (Escape character) : \
- REGEXP_REPLACE : 주어진 문자열에서 특정 패턴을 찾아서 주어진 다른 모양으로 치환하는 함수
EX1. 모든 숫자를 특수 기호로 변경
regexp_replace(text, '[[:digit:]]', '@') --모든숫자부분을 @로 수정
EX2. 특정 패턴을 찾아서 패턴 변경
regexp_replace(text, '([0-9])', '\1-*') --모든 숫자부분 뒤에 '-*'을 추가
regexp_replace(text, '\.', '') -- 모든 . 부분을 삭제
regexp_replace(text, '\.', '/', 1, 1) -- 첫번째 . 부분을 /로 변경
EX3. 사용자에게 입력 받은 문자가운데 공백이 여러개 있을 경우 공백제거
regexp_replace('abc 123', '( ){1,}', '') --공백이 1개 이상일 경우 제거 {n,} : n개 이상
EX4. 사용자가 검색어를 입력할때 공백 문자를 가장 먼저 입력하고 아이디 중간에도 공백을 제거할때
regexp_replace(text, '( ){1,}', '')
EX5. 특정 문자열의 형태를 다른 형태로 바꿀 때
regexp_replace('20140930', '( [[:digit:]]{4}) ([[:digit:]]{2}) ([[:digit:]]{2})', '\1:\2:\3')
-- 20140930 형태로 이루어진 데이터를 2014:09:30의 형태로 변형
- REGEXP_INSTR : 특정 패턴이 출현하는 첫 위치 값을 반환하는 함수
EX1. 특정 문자의 위치 찾기
regexp_instr(text, '\*') --text 중에서 '*'의 첫 위치값을 반환
regexp_instr('aa bb cc dd ee', '[^ ]+', 1, 3) -->7, 처음이 공백이 아닌부분 중, 1번부터 검사하여 3번째 위치
regexp_instr('abc ade abc adf', '[^ ]+[abc]', 1, 2) --처음이 공백이 아니고 abc로 시작되는 두번째글짜의 첫위치
- REGEXP_SUBSTR : 특정 패턴에서 주어진 문자를 추출해내는 함수
EX1. http://www.abc.net 에서 http://부분을 제거하고 출력
LTRIM(regexp_substr(hpage, '/([[:alnum:]]+\.?){3,4}?', '/' ))
EX2. moon92999@gmail.com 에서 @뒤에 있는 주소만 출력
LTRIM(regexp_substr(email, '@([[:alnum:]]+\.?){3,4}?', '@' ))
* 11g에서 추가된 정규식 함수
- REGEXP_COUNT : 특정 문자의 개수를 세는 함수
- REGEXP_SUBSTR
'oracle > [SQL] SQL' 카테고리의 다른 글
6장. DDL (0) | 2014.10.02 |
---|---|
5장. JOIN (0) | 2014.10.02 |
4장. 복수행 함수 (그룹함수) (0) | 2014.10.01 |
2장. 단일행 함수 (0) | 2014.09.29 |
1장. SELECT (0) | 2014.09.29 |
댓글