오라클 정규식 한글 - olakeul jeong-gyusig hangeul

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 '' 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

;

/*

    # 컬럼 check 제약 조건

*/

ALTER TABLE BULLETIN

       ADD CONSTRAINT BULLETIN_USER_NAME_KO_CHK

       CHECK (REGEXP_LIKE(USER_NAME_KO, '^[가-힝]{1,10}$'))

;

출처 : http://develop.sunshiny.kr/840