태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
페이지를 읽고 있습니다. ( 아쿠아바다's Blog )
분류 전체보기 (769)
쉐어포인트 (24)
Exchange (12)
SQL (121)
XML (36)
WEB (294)
O / S (97)
삶의향기 (162)
기획 (19)
RSS 피드(IE 7.0부터 기본 지원됩니다. 이전 버전 사용자는 접합한 툴을 사용하세요!!)

문자열 찾기 여러가지 방법과 함정

SQL 2007/06/07 13:01 by 아쿠아바다

ms Sql과 asp, vb을 사용하는 프로그래머라면
PatIndex와 Instr함수에 대해 알 것이다.
patindex는 문자내에서 특정한 패턴을 찾아 그 위치를 반환하는 msSql내의 함수이고,
inStr은 vb에서 그러한 기능을 하는 함수이다.
그런데 이 두함수를 따로 설명하고자 하는 것은 sql에서는 특정한 문자의 패턴을 검사하기 힘들어
inStr과 같이 쓸수 있는 방법이 없을까 하는 것이다.

먼저 patIndex의 사용법과 inStr의 사용법 그리고 msSql에서 inStr을 사용하기 위한 사용자 함수를 생성하고자 한다.

select patIndex('%,%', '가나442다,3라')    :::: 리턴값 7
select patIndex('%[%', '가나442다[3라')    :::: 리턴값 0   => 이러한 점이 에러가 나는 것이다.

vb에서 inStr은
instr(start_num, origin_string1, fint_string2) 즉 위의 patIndex와 비교한다면
inStr(1, "가나442다,3라", ",")     ::: 리턴값 7
inStr(1, "가나442다[3라", "[")    ::: 리턴값 7

이쯤면 사용자 정의함수의 제작에 대한 서론이 된듯하다.
아래의 구문을 그대로 복사하여 사용자 정의함수를 만든다면
inStr함수를 msSql에서도 사용할 수 있을 것이다.

CREATE FUNCTION dbo.INSTR ( 
 @Start INTEGER = 1 --시작
, @String1 nvarchar(129) --문자열1
, @String2 nvarchar(129) --문자열2
)
RETURNS INTEGER
AS
BEGIN
          WHILE LEN(@String1) - @Start > = 0
          BEGIN 
                    IF SUBSTRING(@String1, @Start, LEN(@String2)) = @String2 
                              BREAK
                              SET @Start = @Start + 1 
          END
          IF @Start > LEN(@String1) 
          SELECT @Start = 0
          RETURN @Start
END


사용은
SELECT dbo.Instr(0,'가나442다[3라', '[') :::리턴값 7
SELECT dbo.Instr(1,'가나442다[3라', '[') :::리턴값 7
SELECT dbo.Instr(2,'가나442다[3라', '[') :::리턴값 7

=> start포지션을 입력은 받되(vb에서의 사용법과 동일하게 하기 위해서), 함수내에서 1로 초기화시켜
start의 의미는 크게 없슴


윤정호님에 덧글


단순하게 특정문자열 1개에 대해서 찾는다면 select CHARINDEX(',', '가나442다,3라') -- 리턴값 7 select CHARINDEX('[', '가나442다[3라') -- 리턴값 7 를 사용해도 무방하겠네요.... 다만 여러가지 조건 사용시는 필요할듯.. ^^ 이런오류가 있는지 알아서 좋은 도움이 됐습니다.



p.s

북스온라인에서 내용 발췌

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


PATINDEX는 text 데이터 형식에서 유용합니다. 이는 IS NULL, IS NOT NULL 및 LIKE(WHERE 절의 text에서 유용한 유일한 기타 비교) 외의 WHERE 절에서 사용할 수 있습니다.

'SQL' 카테고리의 다른 글

프로세스모델  (0) 2007/06/07
페이징 테스트  (0) 2007/06/07
문자열 찾기 여러가지 방법과 함정  (0) 2007/06/07
DBA를 위한 SQL Server "Yukon" 개요  (0) 2007/06/07
Excel Data 쿼리하기(EM)  (0) 2007/06/07
멀티 캐시의 효과  (0) 2007/06/07
좀더 흥미로운 내용이 많이 있습니다.. HOME > SQL를 확인하세요
TAG ,   
0 Trackback, 0 Comment, :
1  ... 539 540 541 542 543 544 545 546 547  ... 769 
Statistics Graph
Total : 557,403 Today : 33