Data Analysis/SQL Basic

[SQL] 영문+숫자 혼합 데이터에서 숫자만 추출하고 조건문 걸기PATINDEX 함수

뉴욕킴 2025. 6. 4. 18:06

* ABC12345 처럼 영문 + 숫자가 조합되어 있는 데이터들이 많을 때 숫자만 골라서 조건문 쓰는 방법

 

 

✅ 1단계: 숫자 존재 여부 확인 – PATINDEX

PATINDEX('%[0-9]%', 컬럼명) > 0


SELECT
  컬럼명,
  CASE 
    WHEN PATINDEX('%[0-9]%', 컬럼명) > 0 THEN '숫자 있음'
    ELSE '숫자 없음'
  END AS 숫자포함여부
FROM 테이블명

 

 

  • PATINDEX('%[0-9]%', 컬럼)은 숫자가 처음 등장하는 위치를 반환합니다.
  • 숫자가 있으면 0보다 큰 값, 없으면 0이 나옵니다.

 

 

 

✅ 2단계: 숫자 추출 – SUBSTRING + PATINDEX

SUBSTRING(컬럼명, PATINDEX('%[0-9]%', 컬럼명), 5)


SELECT
  컬럼명,
  SUBSTRING(컬럼명, PATINDEX('%[0-9]%', 컬럼명), 5) AS 숫자부분
FROM 테이블명
  • 첫 번째 숫자가 나오는 위치부터 5글자 추출
  • 예: 'ABC12345' → '12345'

 

숫자가 없는 경우를 제외하고 분석하고 싶을 땐

WHERE PATINDEX('%[0-9]%', 컬럼명) > 0

 

 

숫자로 필터링된 조건문을 만들고 싶다면 PATINDEX + CAST 조합도 사용 가능

WHERE
  TRY_CAST(SUBSTRING(컬럼명, PATINDEX('%[0-9]%', 컬럼명), 5) AS INT) > 10000
    SUBSTRING(M.LOCNCODE, PATINDEX('%[0-9]%', tablenumber), 5) IN ('10921', '10922', '10931')
    OR SUBSTRING(M.LOCNCODE, PATINDEX('%[0-9]%', tablenumber), 3) IN ('238', '268', '288', '299')