[MSSQL] 문자열 포함 여부 구하는 방법 3가지

SQL Server에서 문자열에 특정 문자가 포함되어 있는지 확인하고 싶을 때는 CHARINDEX, PATINDEX, LIKE 세 가지 방법을 주로 사용한다. 각 함수는 용도에 따라 장단점이 다르며 상황에 따라서 적절한 방법을 선택하면 된다.

CHARINDEX (오라클 INSTR 함수와 유사)는 정확한 문자열이 어느 위치에 있는지를 찾을 수 있으며 ,
PATINDEX는 패턴 기반(와일드카드 포함)의 문자열 위치 탐색이 가능하다.
LIKE는 결과가 TRUE 또는 FALSE로만 반환되며, 조건 필터링에 가장 자주 사용된다.

 

목차

 

CHARINDEX 함수를 사용하여 문자열 포함 여부 구하기

SELECT CHARINDEX('SQL', 'MS SQL Server') AS result

 

 

CHARINDEX('찾을 문자열''검색 대상 문자열')


CHARINDEX 함수를 사용하여 문자열 'MS SQL Server' 안에서 'SQL'이라는 문자열의 위치를 찾는다.
찾을 문자열이 존재할 경우 문자열의 시작위치를 반환하고, 문자열이 없다면 0을 반환한다.

 

SELECT CHARINDEX('S', 'MS SQL Server')    AS result1
     , CHARINDEX('S', 'MS SQL Server', 3) AS result2
     , CHARINDEX('S', 'MS SQL Server', 7) AS result3

 

 

CHARINDEX('찾을 문자열''검색 대상 문자열', '검색 시작위치' )

 

CHARINDEX 함수의 세 번째 인자를 생략하면 대상 문자열을 처음부터 검색하고, 세 번째 인자에 시작 위치를 입력하면 입력한 위치부터 찾을 문자열을 검색한다.

 

WITH emp AS (
    SELECT 7698 empno, 'BLAKE'  ename, 'MANAGER' job UNION ALL
    SELECT 7782 empno, 'CLARK'  ename, 'MANAGER' job UNION ALL
    SELECT 7566 empno, 'JONES'  ename, 'MANAGER' job
)

SELECT *
  FROM emp
 WHERE CHARINDEX('LA', ename) > 0

 

 

위의 쿼리는 ename 컬럼에 'LA'라는 문자열이 포함된 사원만 조회하는 예제이다.
CHARINDEX('LA', ename) > 0 조건을 사용하여 문자열 포함 여부를 판별하고 데이터를 필터링한다.

 

WITH emp AS (
    SELECT 7698 empno, 'BLAKE'  ename, 'MANAGER' job UNION ALL
    SELECT 7782 empno, 'CLARK'  ename, 'MANAGER' job UNION ALL
    SELECT 7566 empno, 'JONES'  ename, 'MANAGER' job
)

SELECT empno
     , ename
     , CASE WHEN CHARINDEX('LA', ename) > 0 THEN 'Y' ELSE 'N' END AS ename_yn
  FROM emp

 

 

위의 쿼리는 ename 컬럼에 'LA'가 포함되어 있는지를 확인하여, 해당 여부를 'Y' 또는 'N'으로 표시하는 예제이다.
문자열 포함 여부를 판단할 때는 CHARINDEX와 CASE 문 조합이 유용하게 사용된다.

 

PATINDEX 함수를 사용하여 문자열 포함 여부 구하기

SELECT PATINDEX('%SQL%', 'MS SQL Server') AS result

 

 

PATINDEX('%찾을 문자열%''검색 대상 문자열')

 

위의 쿼리는 'MS SQL Server'라는 문자열에서 'SQL'이라는 부분 문자열이 처음 찾은 위치를 반환한다.
PATINDEX 함수는 와일드카드 패턴을 포함한 문자열 검색에 사용되며, 찾는 문자열이 없으면 0을 반환한다.

 

※ PATINDEX 함수는 검색 시작위치는 지정할 수 없음

 

SELECT PATINDEX('%[0-9]%', 'Microsoft SQL Server 2022') 
     , PATINDEX('%[a-z]%', 'Microsoft SQL Server 2022')

 

 

위의 쿼리는 PATINDEX 함수에 문자 집합 패턴([0-9], [a-z]) 을 활용하여, 특정 문자 유형(숫자, 소문자)의 위치를 찾는 예제이다. PATINDEX는 단순한 포함 여부를 넘어서, 패턴 매칭의 위치 검색에 유용하게 사용된다.

 

WITH emp AS (
    SELECT 7698 empno, 'BLAKE'  ename, 'MANAGER' job UNION ALL
    SELECT 7782 empno, 'CLARK'  ename, 'MANAGER' job UNION ALL
    SELECT 7566 empno, 'JONES'  ename, 'MANAGER' job
)

SELECT *
  FROM emp
 WHERE PATINDEX('%LA%', ename) > 0

 

 

위의 쿼리는 ename 컬럼에 'LA'라는 문자열이 포함된 사원만 조회하는 예제이다.
PATINDEX('%LA%', ename) > 0 조건을 사용하여 문자열 포함 여부를 판별하고 데이터를 필터링한다.

 

WITH emp AS (
    SELECT 7698 empno, 'BLAKE'  ename, 'MANAGER' job UNION ALL
    SELECT 7782 empno, 'CLARK'  ename, 'MANAGER' job UNION ALL
    SELECT 7566 empno, 'JONES'  ename, 'MANAGER' job
)

SELECT empno
     , ename
     , CASE WHEN PATINDEX('%LA%', ename) > 0 THEN 'Y' ELSE 'N' END AS ename_yn
  FROM emp

 

 

위의 쿼리는 ename 컬럼에 'LA'가 포함되어 있는지를 확인하여, 해당 여부를 'Y' 또는 'N'으로 표시하는 예제이다.
문자열 포함 여부를 판단할 때는 PATINDEX와 CASE 문 조합이 유용하게 사용된다.

 

LIKE 연산자를 사용하여 문자열 포함 여부 구하기

WITH emp AS (
    SELECT 7698 empno, 'BLAKE'  ename, 'MANAGER' job UNION ALL
    SELECT 7782 empno, 'CLARK'  ename, 'MANAGER' job UNION ALL
    SELECT 7566 empno, 'JONES'  ename, 'MANAGER' job
)

SELECT *
  FROM emp
 WHERE ename LIKE '%LA%'

 

 

위의 쿼리는 ename 컬럼에 'LA'라는 부분 문자열이 포함된 사원만 조회하는 예제이다.
LIKE '%LA%' 조건을 사용하여, 'LA'가 이름의 어느 위치에 있든지 검색되도록 한다.

 

WITH emp AS (
    SELECT 7698 empno, 'BLAKE'  ename, 'MANAGER' job UNION ALL
    SELECT 7782 empno, 'CLARK'  ename, 'MANAGER' job UNION ALL
    SELECT 7566 empno, 'JONES'  ename, 'MANAGER' job
)

SELECT empno
     , ename
     , CASE WHEN ename LIKE '%LA%' THEN 'Y' ELSE 'N' END AS ename_yn
  FROM emp

 

 

위의 쿼리는 ename 컬럼에 'LA'가 포함되어 있는지를 확인하여, 해당 여부를 'Y' 또는 'N'으로 표시하는 예제이다.
LIKE 조건으로 문자열 포함 여부를 확인하고, CASE 문과 조합에 유용하게 사용된다.

 

 

[MSSQL] CHARINDEX 함수 사용법

SQL Server에서 CHARINDEX() 함수는 문자열에서 특정 문자를 찾고 위치를 반환한는 함수이다. 오라클 SQL의 INSTR 함수와는 다르게 뒤에서 부터 찾는 기능은 지원하지 않고, 문자열의 앞부터 또는 특정

gent.tistory.com

 

[MSSQL] PATINDEX 함수 사용법

SQL Server에서 패턴(정규식)으로 문자열의 위치를 찾을 때는 PATINDEX 함수를 사용하면 된다. 단순 문자열로 위치를 찾을 때는 CHARINDEX 함수를 사용하면 되며, 패턴으로 문자열 위치를 찾을 때는 PATIND

gent.tistory.com

 

[MSSQL] LIKE 연산자 사용법

SQL Server에서 특정 문자열이 포함되었는지 검색을 할 때에는 LIKE 연산자를 사용하면 된다. SQL Server에서 LIKE 연산자는 타 데이터베이스와 조금 차이가 있는데 기본 옵션이 대소문자를 구분하지 않

gent.tistory.com

 

 

댓글

Designed by JB FACTORY