본문 바로가기

자격증/SQLD

[SQLD][아이리포]27. 서브쿼리 | 정규표현식

반응형
목차

4. 서브쿼리
4-8. 정규표현식
4-8-1. 정규표현식 메타문자
4-8-2. 정규표현식 리터럴 문자
4-8-3. Oracle 정규표현식 함수
4-8-4. SQL Server 패턴 문자열

4. 서브쿼리

4-8. 정규표현식

정규표현식(Regular Expression)이란 문자열에서 특정한 규칙을 가진 문자를 검색하거나, 추출하거나, 변경하기 위해 사용하는 표현 방식이다.

 

특정 문자열의 포함 여부를 확인하거나, 일정한 형식의 데이터를 찾을 때 사용할 수 있다.

 

예를 들어 다음과 같은 작업에 활용할 수 있다.

- 특정 문자로 시작하거나 끝나는 문자열 검색

- 숫자 또는 영문자로 구성된 문자열 검색

- 문자열 일부 추출

- 특정 패턴의 문자열 치환

- 문자열 내 특정 패턴의 개수 확인

1️⃣ 정규표현식 메타문자

메타 문자란 문자 자체의 의미가 아니라, 정규표현식에서 특별한 기능을 수행하는 문자를 말한다.

 

예를 들어 정규표현식에서 '^'는 '^' 문자 자체를 의미하는 것이 아니라, 입력 문자열의 시작을 의미한다.

 

메타 문자 의미
\ 메타 문자를 일반 문자로 표현하거나, 다른 문자와 결합하여 특수한 의미를 나타낸다. \\ : \
\n : 줄바꿈(개행) 문자
^ 문자열의 시작을 의미한다. ^The : The로 싲가하는 문자열
$ 문자열의 끝을 의미한다. ing$ : ing로 끝나는 문자열
. 개행 문자를 제외한 임의의 한 문자와 일치한다. a.b : acb, a-b, a1b
? 바로 앞의 문자가 0개 또는 1개 존재함을 의미한다. no? : n, no
* 바로 앞의 문자가 1개 이상 존재함을 의미한다. no* : n, no, noo, nooo
+ 선행 문자 1개 이상 no+ : no, noo,. nooo
| 여러 표현식 중 하나와 일치함을 의미한다. a|b : a 또는 b
[ ] 대괄호 안에 있는 문자 중 하나와 일치한다. [abc] : a, b, c
[-] 연속된 문자의 범위를 지정한다. [a-z] : a부터 z까지 소문자 알파벳 문자
[^] 대괄호 안의 문자를 제외한 나머지 문자 중 하나와 일치한다. [^abc] : a, b, c를 제외한 나머지 문자
( ) 소괄호 안의 표현식을 하나의 그룹으로 묶는다. (ab) : ab 를 하나의 단위로 처리

 

📌 수량을 나타내는 메타 문자

메타 문자 반복 횟수
? 0회 또는 1회
* 0회 이상
+ 1회 이상

 

2️⃣ 정규표현식 리터럴 문자

리터럴 문자란 문자 자체가 가진 의미 그대로 사용되는 문자를 말한다.

 

정규표현식에서 패턴을 구성하는 가장 기본적인 단위이다.

 

예를 들어 다음과 같은 문자는 각각 문자 자체를 의미한다.

- 영문자 : a, A, b, B

- 숫자 : 1, 2, 3

- 한글 : 가, 나, 다

3️⃣ Oracle 정규표현식 함수

* Oracle은 10g부터 정규표현식 함수를 지원한다.

정규표현식 함수 설명
REGEXP_LIKE 정규표현식을 이용하여 문자열이 특정 패턴과 일치하는지 확인한다.
REGEXP_REPLACE 정규표현식과 일치하는 문자열을 다른 문자열로 변경한다.
REGEXP_INSTR 정규표현식과 일치하는 문자열의 시작 위치를 반환한다.
REGEXP_SUBSTR 정규표현식과 일치하는 부분 문자열을 반환한다.
REGEXP_COUNT 정규표현식과 일치하는 패턴의 개수를 반환한다.

 

🔸 REGEXP_LIKE

문자열이 지정한 정규표현식과 일치하는지 확인한다.

WHERE절에서 주로 사용하며, 일반적인 LIKE 연산자보다 복잡한 패턴을 검색할 수 있다.

 

🔹 기본 사용법

SELECT * 
FROM 테이블명 
WHERE REGEXP_LIKE(컬럼명, '정규표현식');

 

🔹 예제

SELECT ENAME 
FROM EMP
WHERE REGEXP_LIKE(ENAME, '^S');

 

➜ 사원 이름이 'S'로 시작하는 데이터를 조회한다.



🔸 REGEXP_REPLACE

정규표현식과 일치하는 문자열을 다른 문자열로 변경한다.

 

🔹 기본 사용법

REGEXP_REPLACE(문자열, 정규표현식, 변경할 문자열)

 

🔹 예제

SELECT REGEXP_REPLACE('ABC123', '[0-9]', '') 
FROM DUAL;

 

➜ 문자열에서 숫자를 제거하고 ABC를 반환한다.

 

🔸 REGEXP_INSTR

정규표현식과 일치하는 문자열의 위치를 반환한다.

 

🔹 기본 사용법

REGEXP_INSTR(문자열, 정규표현식)

 

🔹 예제

SELECT REGEXP_INSTR('ABC123', '[0-9]')
FROM DUAL;

 

첫 번째 숫자가 나타나는 위치인 4를 반환한다.

 

🔸 REGEXP_SUBSTR

정규표현식과 일치하는 부분 문자열을 추출한다.

 

🔹 기본 사용법

REGEXP_SUBSTR(문자열, 정규표현식)

 

🔹 예제

SELECT REGEXP_SUBSTR('ABC123', '[0-9]+')
FROM DUAL;

 

연속된 숫자 문자열인 123을 반환한다.

 

🔸 REGEXP_COUNT

정규표현식과 일치하는 패턴의 개수를 반환한다.

 

🔹 기본 사용법

REGEXP_COUNT(문자열, 정규표현식)

 

🔹 예제

SELECT REGEXP_COUNT('A1B2C3', '[0-9]')
FROM DUAL;

 

문자열에 포함된 숫자의 개수인 3을 반환한다.

4️⃣ SQL Server 정규표현식 함수

SQL Server는 Oracle의 정규표현식 함수와 동일한 형태를 기본적으로 제공하지 않는다.

 

대신 LIKE 연산자와 PATINDEX 함수를 이용하여 정규표현식과 유사한 패턴 검색을 수행할 수 있다.

 

🔸 PATINDEX 함수

PATINDEX는 문자열에서 지정한 패턴을 검색한 후, 해당 패턴이 시작되는 위치를 반환하는 함수이다.

 

완전한 정규표현식은 아니지만, SQL Server에서 지원하는 패턴 문자를 사용할 수 있다.

 

🔹 기본 사용법

PATINDEX('패턴', 문자열)

 

🔹 예제

SELECT PATINDEX('%[0-9]%', 'ABC123');

 

첫 번째 숫자가 시작되는 위치인 4를 반환한다.

  일치하는 패턴이 없으면 0을 반환한다.

 

🔸 LIKE 연산자

LIKE 연산자는 문자열이 지정한 패턴과 일치하는지 확인할 때 사용한다.

 

%, _, [ ] 등의 패턴 문자를 사용할 수 있다.

 

🔹 기본 사용법

SELECT * 
FROM 테이블명 
WHERE 컬럼명 LIKE '패턴';

 

🔸 SQL Server의 패턴 문자열

메타 문자 의미
% 0개 이상의 문자 %a% : a가 포함되어 있는 문자열 모두
_ 임의의 한 문자 a_b : acb. a-b, a1b
[ ] 대괄호 안의 문자들 중 하나와 일치 [abc] : a, b, c
[-] 연속 문자의 범위를 지정 [a-z] : a부터 z까지 소문자 알파벳 문자
[^] 대괄호 안의 문자열을 제외한 나머지 중 하나와 일치 [^a-z] : a부터 z까지 소문자 알파벳을 제외한 나머지 문자

 


🔗 출처

[SQLD 모든 것]

 

반응형