REGEXP_SUBSTR 정리

TJK·2025년 8월 22일
0

REGEXP_SUBSTR 정리

REGEXP_SUBSTR은 SQL에서 **정규표현식(Regular Expression)**을 사용하여 특정 패턴과 일치하는 부분 문자열을 추출하는 강력한 함수입니다. LIKE보다 훨씬 유연하고 복잡한 패턴을 검색할 수 있어 SQLD 시험에 자주 출제됩니다.


1. 핵심 구문 및 매개변수

REGEXP_SUBSTR(문자열, 패턴, [시작위치], [발생순서], [옵션])

  • 문자열 (필수): 검색 대상이 되는 원본 문자열입니다.
  • 패턴 (필수): 찾고자 하는 정규표현식입니다.
  • 시작위치 (선택): 검색을 시작할 위치(기본값 1).
  • 발생순서 (선택): 패턴과 일치하는 여러 결과 중 몇 번째 매칭을 반환할지 지정합니다. (기본값 1)
  • 옵션 (선택): i (대소문자 무시), c (대소문자 구분, 기본값) 등이 있습니다.

2. 시험 빈출 정규표현식 패턴 (★★★★★)

패턴의미예시
[ ]문자 클래스: 대괄호 안의 문자 중 하나와 일치.[abc], [0-9]
[^ ]부정: 대괄호 안의 문자를 제외한 문자와 일치.[^abc]
^문자열 시작: 문자열의 첫 부분을 의미.^abc (문자열이 abc로 시작)
$문자열 끝: 문자열의 끝 부분을 의미.xyz$ (문자열이 xyz로 끝)
+반복: 바로 앞의 문자가 1회 이상 반복.[0-9]+ (숫자가 1개 이상)
*반복: 바로 앞의 문자가 0회 이상 반복.a* (a가 없거나 여러 개)
?반복: 바로 앞의 문자가 0회 또는 1회.a? (a가 없거나 한 개)
\d특수문자: 숫자([0-9])와 동일.\d{4} (숫자 4자리)

3. SQLD 시험 핵심 포인트

  • [ ]^의 조합: ^abc (문자열이 abc로 시작)과 ^[abc] (첫 글자가 a, b, c 중 하나)의 차이를 정확히 구분해야 합니다.
  • 발생순서 매개변수: SUBSTR과 유사하게 REGEXP_SUBSTR도 몇 번째로 일치하는 값을 반환할지 지정할 수 있습니다.
  • SUBSTR과의 차이: SUBSTR은 시작 위치와 길이를 기반으로 단순 추출하는 반면, REGEXP_SUBSTR패턴을 기반으로 추출한다는 차이가 있습니다.

4. 최종 암기 팁

  • ^ = **S**tart (시작)
  • $ = **E**nd (끝)
  • [] = OR (이것 또는 저것)
  • [^] = NOT (이것 제외)

실전 기출 문제 스타일

1. 다음 쿼리의 실행 결과는?

SELECT REGEXP_SUBSTR('database administrator', 'a', 1, 3) FROM DUAL;

A. a
B. t
C. d
D. NULL

2. 다음 중 문자열이 숫자로 시작하는지를 검사하는 정규표현식은?
A. ^[0-9]
B. ^[0-9]$
C. [0-9]
D. [0-9]+

3. 다음 쿼리의 실행 결과는?

SELECT REGEXP_SUBSTR('my email is my_email@example.com.', '[a-z]+@[a-z]+', 1, 1) FROM DUAL;

A. example.com
B. my_email@example
C. my_email
D. my_email@example


정답 및 해설

  • 문제 1 정답: A
    • 해설: database administrator에서 a는 2번째, 4번째, 12번째에 나옵니다. REGEXP_SUBSTR은 첫 번째 매개변수가 문자열, 두 번째가 패턴, 네 번째가 발생순서입니다. 3번째 a를 찾으므로 결과는 a입니다.
  • 문제 2 정답: A
    • 해설: ^는 문자열의 시작, [0-9]는 숫자 클래스를 의미합니다. 따라서 ^[0-9]는 "문자열이 숫자로 시작"하는 패턴입니다.
  • 문제 3 정답: D
    • 해설: [a-z]+는 알파벳이 1회 이상 반복되는 패턴을 의미합니다. my_email_ 때문에 일치하지 않으므로, 첫 번째로 매칭되는 my_email@example가 반환됩니다. example.com@ 뒤에 .com이 있기 때문에 [a-z]+ 패턴에 일치하지 않습니다.
profile
Hello world!

0개의 댓글