ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • REGEXP_REPLACE 정의 및 예제(활용법)
    Oracle 2014. 5. 29. 14:02

    REGEXP_REPLACE 정의!!

    - 이 함수는 REPLACE 함수를 확장한 개념으로 주어진 문자열에서 특정 패텅을 찾아서 주어진 다른

    모양으로 치환하는 함수입니다. 사용법이 다소 복잡하지만

    유용하게 사용되는 함수이므로 꼭 숙지 하시기 바랍니다.

     

    REGEXP_REPLACE(컬럼명 , 패턴) AS 별칭

     

     

     

    컬럼명에 올 수 있는 데이터 타입은 CHAR,  VARCHAR2, NCHAR, NAVARCHAR2, CLOB, NCLOB 입니다.

    패턴에서는 찾고자 하는 패턴을 512바이트까지 정규 표현식을 사용하시면 됩니다.

     

     

     

    정규식--------------------------

    . 문자 1개의 문자와 일치한다. 단일행 모드에서는 새줄 문자를 제외한다.
    \ 이스케이프 특수 문자를 식에 문자 자체로 포함한다.
    ¦ 선택 여러 식 중에서 하나를 선택한다. 예를 들어, "abc¦adc"는 abc와 adc 문자열을 모두 포함한다.
    ^ 부정 문자 클래스 안의 문자를 제외한 나머지를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않고 ed, fd 등을 포함한다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미한다.
    [] 문자 클래스 "["과 "]" 사이의 문자 중 하나를 선택한다. "¦"를 여러 개 쓴 것과 같은 의미이다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 의미한다.
    () 하위식 여러 식을 하나로 묶을 수 있다. "abc¦adc"와 "a(b¦d)c"는 같은 의미를 가진다.
    * 0회 이상 0개 이상의 문자를 포함한다. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다.
    + 1회 이상 "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다.
     ? 0 또는 1회 "a?b"는 "b", "ab"를 포함한다.
    {m} m회 "a{3}b"는 "aaab"만 포함한다.
    {m,} m회 이상 "a{2,}b"는 "aab", "aaab", "aaaab"를 포함한다. "ab"는 포함되지 않는다.
    {m, n} m회 이상 n회 이하 "a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않는다

     

    POSIX 비표준 펄/Tcl Vim ASCII 설명
    [:alnum:] [A-Za-z0-9] 영숫자
    [:word:] \w \w [A-Za-z0-9_] 영숫자 + "_"
    \W \W [^A-Za-z0-9_] 낱말이 아닌 문자
    [:alpha:] \a [A-Za-z] 알파벳 문자
    [:blank:] \s [ \t] 공백과 탭
    \b \< \> (?<=\W)(?=\w)|(?<=\w)(?=\W) 낱말 경계
    [:cntrl:] [\x00-\x1F\x7F] 제어 문자
    [:digit:] \d \d [0-9] 숫자
    \D \D [^0-9] 숫자가 아닌 문자
    [:graph:] [\x21-\x7E] 보이는 문자
    [:lower:] \l [a-z] 소문자
    [:print:] \p [\x20-\x7E] 보이는 문자 및 공백 문자
    [:punct:] [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-] 구두점
    [:space:] \s \_s (단순히 줄 끝에 추가) [ \t\r\n\v\f] 공백 문자
    \S [^ \t\r\n\v\f] 공백이 아닌 모든 문자
    [:upper:] \u [A-Z] 대문자
    [:xdigit:] \x [A-Fa-f0-9] 16진수

     

     

    -------------------------------

     

    그럼 예제를 보실까요?

     

    실제  데이터 값 = 20101122

     

    - 쿼리 -

    REGEXP_REPLACE(컬럼명,'([[:digit:]]{4})([[:digit:]]{2})([[:digit:]]{2})','\\1-\\2-\\3') as 별칭

     

    DIGIT 은 정규식에서 숫자를 의미 하며 {4}는 2010을 {2} 11을 {2}는 22를 뜻합니다

    이 패턴에서 1번째 값과 2번째 값과 3번째 값을 불러와서 각 자리에 - 를 이용하여 2010-11-22 가 나오게 됩니다

     

     

    이때 포인트!!!

    오라클 에서는 \1-\2-\3 를 이용해서 결과 값이 나오지만 자바에서는 \\를 이용해야지 결과 값이 나옵니다^^ 컴파일 할때 \는 못읽고 \\부터 읽을 수 있는거 같습니다.

     

    'Oracle' 카테고리의 다른 글

    오라클 NVL 이란?  (0) 2014.06.19
    정렬시 null 값 위치 지정  (0) 2014.06.09
    crontab 설정 방법  (0) 2014.05.30
    오라클에서의 LIMIT절과 같은 기능!!!  (0) 2014.04.23
    INSERT문 에서 새롭게 알게된 문법  (0) 2014.04.15
Designed by Tistory.