조각이론
[정규식]REGEXP_REPLACE 정의!![숫자-문자] 본문
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 가 나오게 됩니다
'데이터베이스 > oracle' 카테고리의 다른 글
자신의 컬럼값으로 update (0) | 2019.03.10 |
---|---|
Oracle Tablespace 생성/변경/추가 및 사용자 생성/권한부여 (0) | 2019.02.20 |
[ORACLE] 테이블과 데이터 복사하기 (0) | 2019.01.30 |
LDAP (Lightweight Directory Access Protocol) 이란 (0) | 2019.01.17 |
Oracle Advanced SQL 강좌 (0) | 2019.01.06 |