본문 바로가기
개발언어/SQL

SQL A,B,C 문자열에서 구분자(,)로 나누어 문자비교하기

by 엔돌슨 2010. 5. 13.
반응형

SQL A,B,C 문자열에서 구분자(,)로 나누어 문자비교하기


사용예)
select dbo.FN_StrCustomCmp('cc ', 'abc, bd, cc, dd, ee'

문자열 A,B,C,D,E,F 등의 , 로 구분하여 저장한 필드에서 원하는 문자열을 찾았는지 리턴해줌 (1: true / 0: false)
MSSQL에서 문자열 나누기함수를 이용하여 작성한것입니다.


MS Sql Server - Drop Function If Exists


SQL Function 함수가 존재하는 지 확인하여 존재하면 삭제후 수행한다
1 IF EXISTS (SELECT * FROM sysobjects WHERE name = 'FN_StrCustomCmp' AND type = 'FN')
2 BEGIN
3     DROP FUNCTION FN_StrCustomCmp
4 END
5 GO

SQL Function 함수 만들기


문자열 구분자로 나누어 일치여부를 확인하는 SQL Function 함수를 작성한다.
1 drop function FN_StrCustomCmp
2 ---------------------------------------------------
3 CREATE FUNCTION FN_StrCustomCmp
4 (
5       @strSearch varchar(50)   --찾을 문자
6     , @strData varchar(50))    --문자열 데이타
7 RETURNS varchar(1)
8 AS
9 BEGIN
10     -- A,B,C,D 문자열중 넘겨준 문자와 일치하는 값이 있으면 1을 리턴/ 없으면 0리턴
11     Declare @StrTemp varchar(100)   --
12     Declare @return  varchar(1)        --
13     set @return ='0'
14    
15     While charindex(',', @strData) <> 0 OR Len(ltrim(rtrim(@strData))) > 0
16     BEGIN
17           -- 문자열에서 , 를 만나면
18           If (charindex(',', @strData) = 0)
19                 BEGIN
20                     set @StrTemp = ltrim(rtrim(@strData))
21                     set @strData = ''
22                 END
23           Else
24                 BEGIN
25                     select @StrTemp = ltrim(rtrim(SubString(@strData, 0, charindex(',', @strData))))
26                     Set @strData = ltrim(rtrim(SubString(@strData, CharIndex(',', @strData) + 1, len(@strData))))
27                 END
28           --- 같은 문자열을 찾았으면 While 문을 빠져 나온다. (1: 찾음 0: 못찾음)
29           IF (ltrim(rtrim(@strSearch)) = ltrim(rtrim(@StrTemp)))
30               BEGIN
31                 set @return = '1' BREAK
32               END
33           ELSE
34               BEGIN
35                 set @return = '0'
36               END   
37     END
38 RETURN @return
39 END
40 GO

공백제거 및 첫번째 발견시 break하여 리턴하게 되어 있으며
별도의 기능이 필요시 수정하여 사용하세요.