Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

07 와일드카드로 문자열 검색 본문

MSSQL/SQL 시작하기

07 와일드카드로 문자열 검색

빌드이너프 2024. 10. 1. 17:23

쿼리는 정확하게 조건을 입력해 사용한다.

어떤 경우에는 자신이 검색할 대상을 몰라서 일부만 검색하기도 한다.

이때 LIKE를 사용한다.

 

LIKE

와일드 카드로 지정한 패턴과 일치하는 문자열, 날짜, 시간 등을 검색할 수 있다.

 

LIKE의 기본 형식

SELECT [열] FROM [테이블] WHERE [열] LIKE [조건값]

 

LIKE와 %로 특정 문자열을 포함하는 문자열 검색

특정 문자열을 포함하는 문자열을 검색할 때는 %를 사용한다.

%의 위치에 따라 특정 문자열이 포함된 문자열을 검색할 수 있다.

A% A로 시작하는 모든 문자열
%A A로 끝나는 모든 문자열
%A% A를 포함하는 모든 문자열

 

symbol 열에서 A로 시작하는 문자열을 검색하는 쿼리

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A%';

 

symbol 열에서 AA로 시작하는 문자열을 검색하는 쿼리

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'AA%';

 

symbol 열에서 A로 끝나는 모든 문자열을 검색한 쿼리

SELECT * FROM nasdaq_company
WHERE symbol LIKE '%A';

 

symbol 열에서  AA로 끝나는 모든 문자열을 검색한 쿼리

SELECT * FROM nasdaq_company
WHERE symbol LIKE '%AA';

 

symbol 열에서 A를 포함하는 문자열 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE '%A%';


특정 문자열을 제외한 데이터 검색

특정 문자열을 제외하고 데이터를 검색하면 NOT과 LIKE를 조합해 사용한다.

symbol 열에서 첫 번째 글자가 A로 시작하지 않는 문자열 검색

SELECT * FROM nasdaq_company
WHERE symbol NOT LIKE 'A%';

 

특수 문자를 포함한 문자열 검색

LIKE를 사용해 문자열에 %가 포함된 데이터를 검색할 경우

%는 예약어이므로 '%'와 같이 입력하는 방법으로는 검색할 수 없다.

이럴 경우 ESCAPE를 사용한다.

%을 포함한 임시 테이블 생성

WITH CTE (col_1) AS (
SELECT 'A%BC' UNION ALL
SELECT 'A_BC' UNION ALL
SELECT 'ABC'
)
SELECT * FROM CTE

 

%를 포함한 임시 테이블에서 A%BC만 검색

% 기호는 검색할 수 있는 값이 아닌, 0개 이상의 문자를 의미하는 예약어라서 ESCAPE를 이용해야 한다.

WITH CTE (col_1) AS (
SELECT 'A%BC' UNION ALL
SELECT 'A_BC' UNION ALL
SELECT 'ABC'
)
SELECT * FROM CTE
WHERE col_1 LIKE '%#%%' ESCAPE '#';

ESCAPE 문이 쿼리를 실행할 때 #을 제거해 쿼리 명령 단계에서 '%#%%'이 호출되고

실제 실행할 때는 '%%%'로 해석되어, %를 포함하는 앞뒤 어떠한 문자가 와도 상관없는 데이터가 검색된다.

 

ESCAPE에 사용할 문자는 #, &, !, / 등 다른 것도 쓸 수 있다.

다만 해당 문자가 실제 문자열에 쓰이지 않는 것이어야 한다.

 

%를 포함한 임시 테이블에서 A%BC만 검색: ESCAPE와 ! 사용

WITH CTE (col_1) AS (
SELECT 'A%BC' UNION ALL
SELECT 'A_BC' UNION ALL
SELECT 'ABC'
)
SELECT * FROM CTE
WHERE col_1 LIKE '%!%%' ESCAPE '1';


_로 특정 문자열을 포함하는 특정 길이의 문자열 검색

%는 해당 문자열을 포함하는 모든 데이터를 출력한다.( %를 사용하다보면 가끔 검색된 데이터 양이 매우 많아 원하는 데이터를 빠르게 찾지 못하는 경우가 있다.)

만약 해당 문자열을 포함하는 특정 길이의 문자열을 검색하려면 _를 사용하면 된다.

 

_의 사용 방법

A_ A로 시작하면서 뒤의 글자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열
_A A로 끝나면서 앞의 문자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열
_A_ 세 글자 중 가운데 글자만 A이며 앞뒤로는 무엇이든 상관없는 문자열

 

A로 시작하면서 어떠한 문자열이든 1개만 추가로 허용하는 symbol을 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A_';

 

A로 끝나면서 문자열의 길이가 2인 symbol을 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE '_A';

 

A로 시작하고 C로 끝나면서 문자열이 4개인 symbol을 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A__C';

 

_와 %를 조합해 문자열 검색

특정 문자열로 시작하면서 특정 범위에는 사용자가 원하는 문자열을 포함하는 데이터를 검색하려면 _와 %를 조합한다

 

A_C로 시작하면서 이후로는 어떤 문자열이 오더라도 상관없는 symbol을 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A_C%';

 

__F로 시작하면서 이후로는 어떤 문자열이라도 상관없는 symbol을 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE '__F%';

 

A로 시작하고, 마지막은 L_이기만 하면 되는 symbol을 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A%L_';

 

[]로 문자나 문자 범위를 지정해 문자열 검색하기

%나 _를 사용한 검색은 모든 문자열을 대상으로 한다.

만약 모든 문자열이 아닌 A나 B를 포함한 문자열을 검색하고 싶다면?

그럴 때는 문자나 문자 범위를 지정해 문자열을 검색할 수 있는 []를 사용한다.

 

[]의 사용 방법

[A, B, C] 또는 [A-C]% 첫 글자가 A 또는 B 또는 C로 시작하는 모든 문자열 검색
%[A, B, C] 또는 %[A-C] 마지막 글자가 A 또는 B 또는 C로 끝나는 모든 문자열 검색

 

1번째 문자가 A, 2번째 문자가 A 또는 B 또는 C인 symbol을 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A, B, C]';
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C]';

 

,와 -를 조합하는 방법

첫 글자가 A이고 2번째 문자가 A-C 또는 G 또는 M-R인 symbol 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C, G, M-R]';

 

문자나 문자 범위를 제외한 문자열 검색

특정 문자열을 제외해 검색할 때는 NOT을 사용했다.

하지만 []는 NOT이 아니라 ^를 사용해야 한다.

[^A]%는 첫 번째 글자가 A가 아닌 모든 문자열을 검색한다.

첫 글자가 A이고 2번째 문자가 A, B, C가 아닌 symbol 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[^A, ^B, ^C]';

 

첫 글자가 A이고 2번째 문자가 A, B, C가 아닌 symbol 검색: 연속 범위 미포함

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[^A-C]';

 

다양한 방법으로 와일드카드 사용하기

와일드카드 조합을 사용하면 원하는 데이터를 잘 검색할 수 있다.

A로 시작하면서 2번째 문자는 C, P를 포함하고 3번째 문자는 T를 포함하지 않으면서 마지막 문자는 W로 끝나는 문자열 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[C,P ][^T]%W';

 

1번째 문자는 A, 2번째 문자는 A-C, 3번째 문자는 아무거나, 4번째 문자는 O인 문자열 검색

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C]_O%';