REGEXP_SUBSTR
은 SQL에서 **정규표현식(Regular Expression)**을 사용하여 특정 패턴과 일치하는 부분 문자열을 추출하는 강력한 함수입니다. LIKE
보다 훨씬 유연하고 복잡한 패턴을 검색할 수 있어 SQLD 시험에 자주 출제됩니다.
REGEXP_SUBSTR(문자열, 패턴, [시작위치], [발생순서], [옵션])
문자열
(필수): 검색 대상이 되는 원본 문자열입니다.패턴
(필수): 찾고자 하는 정규표현식입니다.시작위치
(선택): 검색을 시작할 위치(기본값 1).발생순서
(선택): 패턴과 일치하는 여러 결과 중 몇 번째 매칭을 반환할지 지정합니다. (기본값 1)옵션
(선택): i
(대소문자 무시), c
(대소문자 구분, 기본값) 등이 있습니다.패턴 | 의미 | 예시 |
---|---|---|
[ ] | 문자 클래스: 대괄호 안의 문자 중 하나와 일치. | [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자리) |
[ ]
와 ^
의 조합: ^abc
(문자열이 abc
로 시작)과 ^[abc]
(첫 글자가 a, b, c
중 하나)의 차이를 정확히 구분해야 합니다.발생순서
매개변수: SUBSTR
과 유사하게 REGEXP_SUBSTR
도 몇 번째로 일치하는 값을 반환할지 지정할 수 있습니다.SUBSTR
과의 차이: SUBSTR
은 시작 위치와 길이를 기반으로 단순 추출하는 반면, REGEXP_SUBSTR
은 패턴을 기반으로 추출한다는 차이가 있습니다.^
= **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
database administrator
에서 a
는 2번째, 4번째, 12번째에 나옵니다. REGEXP_SUBSTR
은 첫 번째 매개변수가 문자열, 두 번째가 패턴, 네 번째가 발생순서입니다. 3번째 a
를 찾으므로 결과는 a
입니다.^
는 문자열의 시작, [0-9]
는 숫자 클래스를 의미합니다. 따라서 ^[0-9]
는 "문자열이 숫자로 시작"하는 패턴입니다.[a-z]+
는 알파벳이 1회 이상 반복되는 패턴을 의미합니다. my_email
은 _
때문에 일치하지 않으므로, 첫 번째로 매칭되는 my_email@example
가 반환됩니다. example.com
은 @
뒤에 .com
이 있기 때문에 [a-z]+
패턴에 일치하지 않습니다.