rueki

SQL에서의 정규표현식(Regular Expression) 본문

SQL

SQL에서의 정규표현식(Regular Expression)

륵기 2020. 4. 24. 17:56
728x90
반응형
  • 정규표현식 함수의 문법

     기본 연산자 ,앵커, 수량사

 

- 수량사 (Quantifier)

  수량사는 선행 표현식의 일치 횟수를 지정한다.

  패턴은 최대로 일치시키는 탐욕적(Greedy) 방식으로 동작한다.

 

연산자 설명
? 0회 또는 1회 일치
* 0회 또는 그 이상의 횟수로 일치
+ 1회 또는 그 이상의 횟수로 일치
{m} M회 일치
{m,} 최소 m회 일치
{,m} 최대 m회 일치
{m,m} 최소 m회, 최대 n회 일치

Ex) select regexp_substr('ac','ab?c') as c1,

             regexp_substr('abc', 'ab?c') as c2,

             regexp_substr('abbc', 'ab?c') as c3

             regexp_substr('ac', 'ab*c') as c4,

             regexp_substr('abc', 'ab*c') as c5,

             regexp_substr('abbc','ab*c') as c6

             regexp_substr('ac','ab+c') as c7,

             regexp_substr('abc','ab+c') as c8

             regexp_substr('abbc', 'ab+c') as c9

    from dual;

 

Ex) select regexp_substr('ababc', '(ab)+c') as c1,

             regexp_substr('ab+c') as c2,

             regexp_substr('abd', 'a(b|c)d' as c3,

             regexp_substr('abd', 'ab|cd') as c4 from dual;

 


 

  • Posix 문자클래스

     오라클 정규표현식은 posix 문자 클래스를 지원한다.

     Posix 문자 클래스는 문자 리스트에 사용해야한다.

문자 클래스

설명

동일

[:digit:]

숫자

[0-9]

[:lower:]

소문자

[a-z]

[:upper:]

대문자

[A-Z]

[:alpha:]

영문자

[a-zA-Z]

[:alnum:]

영문자와 숫자

[0-9a-zA-Z]

[:blank:]

공백문자

 

[:space:]

공간문자(space, enter, tab)

 

[:punct:]

구두점 기호

 

[:xdigit:]

16진수

 

 

  • Regexp_count 함수문자열에서 해당되는 패턴이 몇 번 등장하는 지 알아내기 위한 함수

Ex) SELECT REGEXP_COUNT(

       'ccacctttccctccactcctcacgttctcacctgtaaagcgtccctccctcatccccatgcccccttaccctgcag

        ggtagagtaggctagaaaccagagagctccaagctccatctgtggagaggtgccatccttgggctgcagagagaggag

       aatttgccccaaagctgcctgcagagcttcaccacccttagtctcacaaagccttgagttcatagcatttcttgagtt

       ttcaccctgcccagcaggacactgcagcacccaaagggcttcccaggagtagggttgccctcaagaggctcttgggtc

       tgatggccacatcctggaattgttttcaagttgatggtcacagccctgaggcatgtaggggcgtggggatgcgctctg

       ctctgctctcctctcctgaacccctgaaccctctggctaccccagagcacttagagccag',

'gtc') AS Count

FROM dual;

 

 

  • Regexp_replace

      replace 함수와 같은 기능을 하지만, 해당되는 패턴으로 replace 하는 함수이다.

 

      Ex) Select ename, replace(sal, 0, '*') from emp;


연산자        

영문

설명

.

dot

모든 문자와 일치

|

or

대체 문자를 구분

\

Back slash

다음 문자를 일반 문자로 처리

 

Ex) selec regexp_substr('aab','a.b') as c1,

            regexp_substr('abb','a.b') as c2,

            regexp_substr('acb','a.b') as c3,

            regexp_substr('abc', 'a.b') as c4

From dual;

 

 

  • 앵커

연산자

영문

단일행 방식

다중행 방식

^

carrot

문자열의 시작

행의 시작

$

dollar

문자열의

행의

create table as employees

as

select * from hr.employees;


문제 428. 이름에 EN 혹은 IN을 포함하고 있는 사원들의 이름과 월급을 출력하세요

select ename, sal, regexp_substr(ename,'EN|IN') from emp;

select ename, sal, regexp_substr(ename,'EN|IN') from emp;

 

문제 431. 이름의 첫글자가 ST로 끝나면서 끝 글자가 en으로 끝나는 사원들의 first_name을 출력하세요

Select first_name From employees

Where regexp_like(first_name, '^St(.)+en$');

Select first_name From employees
Where regexp_like(first_name, '^St(.)+en$');

 

문제 436. 위치 테이블에서 주소에서 알파벳으로 시작하지 않는 곳의 자리수를 출력하세요

select regexp_instr(street_address, '[^[:alpha:]]')
from locations;

select regexp_instr(street_address, '[^[:alpha:]]') 
from locations;

 

문제 443. 이름과 월급까지 출력하는 데 월급 숫자에서 0~3까지를 *로 출력하세요.

select regexp_replace(birth,'[0-3]','*') from emp;

select regexp_replace(birth,'[0-3]','*') 
from emp;

 

 

728x90
반응형

'SQL' 카테고리의 다른 글

SQLD 1장 데이터 모델링 정리  (0) 2020.05.23
SQLD 최적화 기본 원리 정리  (0) 2020.05.21
SQL CHAR와 VARCHAR2의 차이  (0) 2020.04.24
SQL INDEX  (0) 2020.04.21
SQL Table, View  (0) 2020.04.17
Comments