본문 바로가기
Oracle(DB관련)

oracle 정규식 REGEXP

by xfree302 2021. 11. 10.
반응형

Oracle 10g에서는 REGEXP_로 시작하는 함수를 지원합니다. 레귤러 익스프레션 지원이죠. 아래는 그 함수들의 사용방법을 공유합니다.

1. REGEXP_INSTR 함수
- 문법 : REGEXP_INSTR(소스 문자열, Pattern [, 검색 시작 위치 [, 발생 횟수 [, 반환 옵션 [, Match를 시도할 때의 옵션]]]])
- 예제

1
2
3
4
5
6
SELECT REGEXP_INSTR('Regular Expression', 'a') REG_INS
FROM 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_SUB
FROM(                                      
         SELECT 'pepsi@paran.com' EMAIL    
         FROM dual                         
); 


REG_S
-----
pepsi


위 내용 출처 : http://happybuk.tistory.com/50


# 예제

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
/*
    - 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.kr/840



출처: https://wintness.tistory.com/173

 

[펌] Oracle - 정규식 문법, 한글, 영문 구분, 컬럼 체크 제약 조건

Oracle 10g에서는 REGEXP_로 시작하는 함수를 지원합니다. 레귤러 익스프레션 지원이죠. 아래는 그 함수들의 사용방법을 공유합니다. 1. REGEXP_INSTR 함수 - 문법 : REGEXP_INSTR(소스 문자열, Pattern [, 검색..

wintness.tistory.com

https://wintness.tistory.com/173

반응형

'Oracle(DB관련)' 카테고리의 다른 글

table 권한 조회  (0) 2022.02.11
Oralce rollup, cube, grouping sets  (0) 2022.02.04
FTP From PL/SQL  (0) 2021.07.14
oracle 독립 트랜잭션 pragma autonomous_transaction  (0) 2021.04.13
Oracle table, tablespace 용량 확인  (0) 2021.03.19