Oracle 10g에서는 REGEXP_로 시작하는 함수를 지원합니다. 레귤러 익스프레션 지원이죠. 아래는 그 함수들의 사용방법을 공유합니다.
1. REGEXP_INSTR 함수
- 문법 : REGEXP_INSTR(소스 문자열, Pattern [, 검색 시작 위치 [, 발생 횟수 [, 반환 옵션 [, Match를 시도할 때의 옵션]]]])
- 예제
1 2 3 4 5 6 | SELECT REGEXP_INSTR('Regular Expression', 'a') REG_INSFROM dual; REG_INS---------- 6 |
2. REGEXP_LIKE
- 문법 : REGEXP_LIKE(소스 문자열, Pattern [, Match를 시도할 때의 옵션])
- [[:digit:]] : 숫자인것
- [^[:digit:]] : 숫자가 아닌것
- [[:alpha:]]
- 필듯가 숫자와 문자가 같이 있을 경우 잘 판단해야 함
- 예제
1 2 3 4 5 6 7 8 9 10 | SELECT SSN FROM TEST WHERE SSN > ' ' AND REGEXP_LIKE(SSN, '[^[:digit:]]');SSN-------------******2229149******2228659******2223591 |
3. REGEXP_REPLACE
- REGEXP_REPLACE(소스 문자열, Pattern [, 바꿀 문자열 [, 위치 [, 발생횟수 [Match 파라미터]]]])
- 예제
1 2 3 4 5 6 7 8 9 | SELECT REGEXP_REPLACE(SSN, '[0-9]', '*' , 7) REG_REP FROM( SELECT '7901061842210' SSN FROM dual ); REG_REP-------------790106******* |
4. REGEXP_SUBSTR
- REGEXP_SUBSTR(소스 문자열, Pattern [, 위치 [, 발생 횟수 [, Match를 시도할 때의 옵션]]])
- 예제
1 2 3 4 5 6 7 8 9 | SELECT REGEXP_SUBSTR(EMAIL, '[^@]+') REG_SUBFROM( SELECT 'pepsi@paran.com' EMAIL FROM dual ); REG_S-----pepsi |
위 내용 출처 : http://happybuk.tistory.com/50
# 문자 클래스
[:digit:] : 숫자
[:punct:] : 특수문자
[:alpha:] : 알파벳
기타, 정규표현식 단축 문자, 문자 클래스
# 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | /*-- # 문자 클래스이용 숫자, 특수문자 제거*/SELECT REGEXP_REPLACE( '!23$56^*[]<>()~`'' 숫자, .특수문자 테스트_Test ' , '[[:digit:]|[:punct:]]' , '') AS RESULT FROM DUAL; RESULT-------------------------------------------------------------------------------- 숫자 특수문자 테스트Test--------------------------------------------------------------------------------/* -- TOPIC 컬럼에 한글이 1~10개 사이인 것을 조회 -- 옵션 $ = {}$ 과 사용시에 절대값인듯...?*/SELECT BULLETIN_SEQ , TOPIC , CREATE_ID FROM BULLETIN WHERE REGEXP_LIKE(TOPIC, '^[가-힝]{1,10}$') ORDER BY 1;--------------------------------------------------------------------------------/* -- 한글 문자인 것만 조회*/ SELECT BULLETIN_SEQ , TOPIC , CREATE_ID FROM BULLETIN WHERE REGEXP_LIKE(TOPIC, '^[가-힝]') ORDER BY 1;--------------------------------------------------------------------------------/* -- # TOPIC 컬럼에 영어 대소문자가 3~10개 사이 또는 한글이 2~3개 사이인 것을 조회*/ SELECT BULLETIN_SEQ , TOPIC , CREATE_ID FROM BULLETIN WHERE REGEXP_LIKE(TOPIC, '^[a-zA-Z]{3,10}|[가-힝]{2,3}$'); --------------------------------------------------------------------------------SELECT pw FROM t WHERE REGEXP_LIKE(pw, '[a-z]') -- 소문자 포함 여부 AND REGEXP_LIKE(pw, '[A-Z]') -- 대문자 포함 여부 AND REGEXP_LIKE(pw, '[0-9]') -- 숫자 포함 여부 AND REGEXP_LIKE(pw, '[[:punct:]]') -- 특수문자 포함 여부 AND LENGTH(pw) >= 8 -- 8자리 이상;--------------------------------------------------------------------------------/* -- # 컬럼 check 제약 조건 */-- 10자 이하의 한글만 입력 받고자 할때.ALTER TABLE BULLETIN ADD CONSTRAINT BULLETIN_USER_NAME_KO_CHK CHECK (REGEXP_LIKE(USER_NAME_KO, '^[가-힝]{1,10}$')) ; |
출처 ; http://develop.sunshiny.co.kr/840
'프로그램 관련 > oracle' 카테고리의 다른 글
| oracle substr 문자열 추출입니다 (0) | 2018.10.01 |
|---|---|
| 오라클 REPLACE 사용기 (0) | 2018.10.01 |
| Oracle - chr() 함수, Ascii 함수 (0) | 2018.09.11 |
| Oracle 중복 값 체크및 제거 (0) | 2018.09.11 |
| Oracle Replace 함수 생성(결과값 변환 출력) (0) | 2018.09.11 |