프로그래밍/DB

[DB] MSSQL 문자함수 문자열추출(PADINDEX)

ss-pro 2021. 8. 19. 00:37
반응형

PADINDEX는 문자열 비교시 패턴매칭을 사용하여 해당문자열의 위치를 찾을수 있게해주는 함수입니다. 해당함수와 패턴을 적절히 사용하면 문자열값중 숫자값만 있는지, 특수문자가 있는지, 한글값이 있는지등을 체크할수 있습니다. 그럼 먼저 PADINDEX의 구문정보를 알아보겠습니다.

1. PADINDEX 구문
표현식(expression)에서 패턴이 처음 나타나는 시작 위치를 반환하거나 패턴을 찾지 못하면 0을 반환합니다.

PADINDEX ('%pattern%',expression)

2. 패턴 매칭 (Pattern)
UNIX에 주로 사용되는데 MSSQL에서도 비슷하게 사용되고 패턴매칭에 사용대는 와일드카드는 아래와 같습니다.

3. PADINDEX예제
패턴매칭을 사용해서 해당문자열에 어떻게 결과값이 나오는지 확인해보겠습니다. Padindex Test라는 표현식을 가지고 문자열 포함유무에 대하여 테스트해보겠습니다. [e]의패턴은 e글자가 있을경우에는 해당문자열 시작위치값이 반환이되고 없을경우에는 0이 반환됩니다. [^e]의 경우는 반대로 e를 제외한 다른값이 올경우에는 해당문자가 발견된 위치값이 나오고, 해당값이 있을경우에는 0이 반환됩니다.

1
2
3
4
5
6
7
SELECT PATINDEX('%T%'    , 'Padindex Test') 결과1    
SELECT PATINDEX('%T[e]%' , 'Padindex Test') 결과2    
SELECT PATINDEX('%T[c]%' , 'Padindex Test') 결과3
SELECT PATINDEX('%T[^e]%''Padindex Test') 결과4
SELECT PATINDEX('%T[^c]%''Padindex Test') 결과5  
SELECT PATINDEX('%T[^c]%''P')             결과6
SELECT PATINDEX('%T[^c]%''T')             결과7

쿼리결과

4. 특수문자가 있는지 확인
패턴을 이용해서 문자열내에 영문/숫자를 제외한 값이 있는지 확인해보도록 하겠습니다. 한글에 대한 부분은 예외로 하고 영문/숫자/스페이스를 제외한 데이터가 특수문자라고 가정하고 패턴을 만들어보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
declare @d1 varchar(max)
declare @d2 varchar(max)
declare @d3 varchar(max)
declare @d4 varchar(max)
 
set @d1 = 'Find Special Characters!' 
set @d2 = '0231asfd11 abc' 
set @d3 = '0231asfd11 안녕' 
 
SELECT PATINDEX('%[^a-zA-Z0-9 ]%', @d1)
SELECT PATINDEX('%[^a-zA-Z0-9 ]%', @d2)
SELECT PATINDEX('%[^a-zA-Z0-9 ]%', @d3)

쿼리결과 

5. PADINEX이용 숫자값만 추출 

패턴을 이용해서 문자값에서 숫자만 추출해보도록 하겠습니다. 와일드카드값만 잘 활용하면됩니다.
숫자만 추출하는 스크립트입니다. stuff함수를 사용해서 숫자가 아닐경우에는 해당값을 지우도록 하겠습니다. 
1
2
3
4
5
6
7
8
9
10
11
12
13
declare @d1 varchar(max)
declare @pos int = 1 
set @d1 = 'Find 112354 안녕 Special Characters!0'  
 
while @pos > 0 
begin
    set @pos = PATINDEX('%[^0-9]%', @d1)
    if @pos >0
    begin
        set @d1 = stuff(@d1,@pos,1,'')
    end 
end 
select @d1
 

쿼리결과

 


출처,참고)
https://docs.microsoft.com/ko-kr/sql/t-sql/language-elements/like-transact-sql?view=sql-server-ver15
https://docs.microsoft.com/ko-kr/sql/t-sql/functions/patindex-transact-sql?view=sql-server-ver15