'앞뒤자르기'에 해당되는 글 1건

  1. 2010.01.26 특정 문자를 기준으로 앞뒤 자르기에 유용한 CHARINDEX () 함수

-- 온라인 설명서

CHARINDEX PATINDEX 함수는 지정한 패턴의 시작 위치를 반환합니다.
PATINDEX
에서는 와일드카드 문자를 사용할 수 있지만 CHARINDEX에서는 사용할 수 없습니다.

이 두 가지 함수는 2개의 매개 변수를 사용합니다.

·         원하는 위치의 패턴 - PATINDEX를 사용할 때는 와일드카드 문자를 포함할 수 있는 리터럴 문자열을 패턴으로 사용하며 CHARINDEX에서는 와일드카드 문자가 없는 리터럴 문자열을 패턴으로 사용합니다.

·         문자열 값의 식 - 일반적으로 열 이름이며 지정된 패턴을 검색하는 데 사용됩니다.

예를 들어 다음은 Document 테이블에 있는 Title 열의 특정 행에서 arm 패턴이 시작하는 위치를 찾는 코드 예입니다.

 

USE AdventureWorks;

GO

SELECT CHARINDEX('arm', Title)

FROM Production.Document

WHERE DocumentID = '1';

GO

결과 집합은 다음과 같습니다.

 

----------------

7

 

(1 row(s) affected)

검색할 행을 제한하지 않은 경우 쿼리는 테이블의 모든 행을 반환하고
패턴을 찾은 행에 대해서는 0이 아닌 값을, 나머지 행에 대해서는 0 값을 보고합니다.

다음 예에서는 Document 테이블에 있는 Title 열의 특정 행에서 reflector 패턴이 시작하는 위치를 찾기 위해 와일드카드 문자를 사용하는 방법을 보여 줍니다.

 

USE AdventureWorks;

GO

SELECT DocumentID, PATINDEX('%reflector%', Title)AS POSITION

FROM Production.Document

WHERE PATINDEX('%reflector%', Title) <> 0;

GO

결과 집합은 다음과 같습니다.

 

DocumentID        POSITION

----------        --------

2                 7

3                 7

 

(2 row(s) affected)

검색할 행을 제한하지 않으면
쿼리는 테이블의 모든 행을 반환하고 패턴을 찾은 행에 대해 0이 아닌 값을 보고합니다.

CHARINDEXtext, ntext image 데이터 형식과 함께 사용할 수 없습니다.



쿼리문을 짜다가 특정 구간에 대한 검색을 해야될 경우가 생겼다.
구간이다 보니 파라미터를 두개로 받자니 애매하고
하나로 받아서 처리할려다 보니
20~30 과 같이 물결 무늬를 넣어 넘기기로 정의했다.

이를 프로시저에서 받아 물결무늬를 기점으로 앞뒤를 잘라 사용하는것이다.
이때 유용한 함수가 CHARINDEX () 함수 이다.

사용예는 다음과 같다.

이하 WHERE 절 부분 조건(물결무늬 처리 EX) 20~30 )

비교컬럼 >=  LEFT(''' + @파라미터값 + ''', CHARINDEX(''~'', ''' + @파라미터값 + ''') - 1) 
    AND 비교컬럼 <= RIGHT(''' + @파라미터값 + ''', CHARINDEX(''~'', REVERSE(''' + @파라미터값 + ''')) - 1)

 
위와 같이 하면 하나의 '20~30' 이라는 파라미터값으로
그 구간을 검색할수 있다
지금 짜는 프로시저에 많이 쓰였넹...

Posted by 스왓
이전버튼 1 이전버튼