본문 바로가기

[DB]DataBase/[SQL]

[SQLD] 정규 표현식

728x90
반응형

정규 표현식

  • 문자열의 공통된 규칙을 보다 일반화 하여 표현하는 방법
  • 정규 표현식 사용 가능한 문자함수 제공
    • regexp_replace, regexp_substr, regexp_instr, ...
  • 예) '숫자를 포함하는', '숫자로 시작하는 4자리', '두 번째 자리가 A인 5글자'

일반화 규칙 찾아내기

일반화 규칙 찾아내기

-> '숫자를 연속적으로 3개 이상 포함하는' 공통 패턴

 

정규 표현식 종류

정규 표현식 종류

예제

전화번호 일반화

 

문자함수

REGEXP_REPLACE

정규 표현식을 사용한 문자열 치환 가능

REGEXP_REPLACE(대상, 찾을문자열, [바꿀문자열], [검색위치], [발견횟수], [옵션])

 

특징

  • 바꿀 문자열 생략 시 문자열 삭제
  • 검색 위치 생략 시 1
  • 발견 횟수 생략 시 0 (all)

옵션

  • c
    • 대소를 구분하여 검색
  • i
    • 대소를 구분하지 않고 검색
  • m
    • 패턴을 다중 라인으로 선언 가능

예시

ID에서 숫자 삭제
ID에서 특수기호 삭제

 

REGEXP_SUBSTR

  • 정규식 표현식을 사용한 문자열 추출
  • 옵션은 REGEXP_SUBSTR과 동일
REGEXP_SUBSTR(대상, 패턴, [검색위치], [발견횟수], [옵션], [추출그룹])

 

특징

  • 검색위치 생략 시 1
  • 발견 횟수 생략 시 1
  • 추출 그룹은 서브 패턴을 추출 시 그 중 추출 할 서브 패턴 번호

예시

전화번호를 분리한 뒤 지역번호 추출

-> 전화번호 구성 :숫자여러개 + ) + 숫자여러개 + - + 숫자여러개
차례대로 \d+, \), \d+, -, \d+ 로 표현 가능, 그 중 첫 번째 그룹을 추출 

이메일 아이디 추출 (서브패턴 사용)

-> EMAIL 주소는 EMAIL_ID@ENGINE 으로 구성 
-> EMAIL_ID : 몇 특수기호를 제외한 영문, 숫자, 기호로 구성 
-> ENGINE : 영문과 .으로 구성

 

REGEXP_INSTR

주어진 문자열에서 특정 패턴의 시작 위치를 반환

REGEXP_INSTR(원본, 찾을문자열, [시작위치], [발견횟수])

 

특징

  • 시작 위치 생략 시 처음부터 확인 (default: 1)
  • 발견 횟수 생략 시 처음 발견된 문자열 위치 리턴

예시

ID 값에서 두 번째 발견된 숫자의 위치

 

REGEXP_LIKE

  • 주어진 문자열에서 특정 패턴을 갖는 경우 반환 (WHERE 절 사용만 가능)
  • 옵션 REGEXP_REPLACE와 동일
  • 시작 위치, 추출 개수 인수 없음
REGEXP_LIKE(원본, 찾을문자열, [옵션])

 

예시

ID 값이 숫자로 끝나는 교수 정보 출력

 

REGEXP_COUNT

  • 주어진 문자열에서 특정 패턴의 횟수를 반환
  • 옵션은 REGEXP_REPLACE와 동일
REGEXP_COUNT (원본, 찾을문자열, 시작위치, [옵션])

 

예시

ID 값에서 숫자의 갯수

-> \d 는 한 자리수의 숫자를 의미하며 \d+는 연속적인 숫자를 의미. 따라서 COUNT 시 연속적인 숫자를 하나로 취급.

 

반응형

'[DB]DataBase > [SQL]' 카테고리의 다른 글

[SQLD] TCL  (0) 2024.05.21
[SQLD] DML  (0) 2024.05.21
[SQLD] PIVOT 절과 UNPIVOT 절  (0) 2024.05.20
[SQLD] 계층형 질의와 셀프 조인  (0) 2024.05.19
[SQLD] Top N 쿼리  (0) 2024.05.18