PatIndex Vs InStr MS-SQL



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의 의미는 크게 없슴


덧글

댓글 입력 영역


통계 위젯 (화이트)

323
153
356271

red 210