본문 바로가기
  • [성공하는 개발자] - Developer
DataBase/MSSQL

[MSSQL] LIKE 연산자 사용법 (NOT LIKE, 정규식)

by Sein-JH 2022. 11. 14.
728x90

 

SQL Server에서 특정 문자열이 포함되었는지 검색을 할 때에는 LIKE 연산자를 사용하면 된다. SQL Server에서 LIKE 연산자는 타 데이터베이스와 조금 차이가 있는데 기본 옵션이 대소문자를 구분하지 않는다는 것이다. 그리고 정규식의 일부 기능인 문자 범위 패턴만 검색이 가능하다. REGEXP_LIKE와 같은 정규식 LIKE 함수는 없다.

 

% : 0개 이상의 어떠한 문자열이 존재해도 상관없음
_ : 밑줄(_) 개수 만큰 문자가 존재해야 함
[] : 대괄호([]) 안의 지정된 문자 범위 또는 문자가 존재해야 함
[^] : 대괄호([]) 안의 지정된 문자 범위 또는 문자 외의 문자가 존재해야 함

 

 기본 사용법 (LIKE, NOT LIKE, 대소문자 구분)

SELECT *
  FROM Languages
 WHERE LangName LIKE 'Java%'

 

 

'Java'로 시작하는 문자열을 검색한다. 'Java' 뒤에 %(와일드카드) 어떠한 문자열이 존재해도 된다는 의미이다.

MSSQL에서는 LIKE 검색 시 대소문자를 구분하지 않기 때문에 'Java%'와 'java%'가 동일하게 검색된다.

 

SELECT *
  FROM Languages
 WHERE LangName COLLATE Korean_Wansung_CS_AS LIKE 'Java%'

 

대소문자를 구분하여 검색하기 위해서는 칼럼명 뒤에 "COLLATE Korean_Wansung_CS_AS"을 사용하면 된다.

 

SELECT *
  FROM Languages
 WHERE LangName NOT LIKE 'Java%'

 

 

NOT LIKE를 사용하면 'Java'로 시작하는 문자열은 제외하고 검색된다. 

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%Script'

 

 

'Script'로 끝나는 문자열을 검색한다.

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%S%'

 

 

시작, 중간, 끝에 'S'가 존재하는 문자열을 검색한다.

검색어의 앞뒤에 와일드카드(%)가 있기 때문에 'S'의 앞뒤에 어떠한 문자열이 존재해도 상관없다.

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%J%S%'

 

 

'J' 'S'가 동시에 존재하는 문자열을 검색한다. 'J'와 'S'의 문자 순서는 일치해야 한다.

 

 밑줄( _ ) 사용법

SELECT *
  FROM Languages
 WHERE LangName LIKE '____Script'

 

 

'Script' 앞에 4자리의 임의 문자가 존재하면 검색된다.

LIKE에서 밑줄(_)을 사용할 경우 밑줄의 개수만큼 임의 문자가 존재하면 된다.

 

SELECT *
  FROM Languages
 WHERE LangName LIKE 'Ja__%'

 

 

'Ja'로 시작 + 임의 문자 2자리 + 와일드카드(%)

 

 문자 범위 패턴 검색 (정규식)

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[0-9]%'

 

 

0부터 9까지 숫자가 포함된 문자열을 검색한다. (예, [1-9], [1-5], [123789])

문자 범위 패턴을 사용할 때는 대괄호([])로 범위를 감싸면 된다.

 

정규식 문법과 유사해 보이지만 모든 정규식 문법을 사용할 수 없다.

사용가능한 패턴은 아래와 같다.

[] : 문자 셋 (하나의 문자 셋만 가능), 예) %[0-9]%[A-Z]% 가능, %[0-9][A-Z]% 불가

- :  연속된 문자

^ : 부정

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[A-Z]%'

 

 

A부터 Z까지 알파벳 문자가 포함된 문자열을 검색한다. (예, [A-C], [ABC])

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[a-z]%'

 

 

a부터 z까지 알파벳 문자가 포함된 문자열을 검색한다.

대소문자를 구분하지 않기 때문에 [A-Z]와 동일한 결과를 검색한다.

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[가-힣]%'

 

 

한글이 포함된 문자열을 검색한다.

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[^a-z]%'

 

 

삿갓(^)을 사용하면 a-z 알파벳이 포함되지 않은 문자열이 있을 경우 검색한다.

(숫자와 한글이 포함된 문자열만 조회됨) NOT LIKE와 유사한 의미이다.

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[0-9가-힣]%'

 

 

숫자와 한글이 포함된 문자열을 검색한다.

문자열 범위를 여러 개 연속해서 부여할 수 있다.

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[0-9a-zA-Z]%'

 

 

숫자와 영문자가 포함된 문자열을 검색한다.

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[12345]%'

 

 

1, 2, 3, 4, 5가 하나라도 포함된 문자열을 검색한다.

문자열 범위(0-9, A-Z)를 지정하지 않고 개별 문자를 지정할 수 있다.

 

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[ST]%'

 

 

'S', 'T'가 하나라도 포함된 문자열을 검색한다.

 

■ 예약어가 포함된 문자열 검색 (%, _, [, ])

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[%]%'
;

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[_]%'
;

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[[]%'
 ;

SELECT *
  FROM Languages
 WHERE LangName LIKE '%[]]%'

 

LIKE 검색 시 사용하는 예약어(%, _, [, ])가 포함된 문자열을 검색할 때는 대괄호([])를 사용하여 검색하면 된다.\

 

참고 : https://gent.tistory.com/453

댓글