복붙노트

[SQL] SQL Server 2008의 쉼표로 분할 문자열

SQL

SQL Server 2008의 쉼표로 분할 문자열

두 문자열 A와 B가있다

다음은 문자열은 쉼표가 포함되어 있습니다. 그때, 쉼표로 문자열을 분할 모든 요소를 ​​통과하고 싶습니다.

더 B 문자열이 모든 요소가 포함되어있는 경우 쉼표로하는 분할 0을 반환합니다

(예 : A = "4,6,8"; B = ㄴ 문자열이 포함 "R3799514 때문에"0 복귀 4 정도)

어떻게 저장 프로 시저와 함께이를 달성하기 위해? 사전에 감사합니다!

나는 분할 기능을 볼 수있다 :

CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))     
returns @temptable TABLE (items varchar(8000))     
as     
begin     
declare @idx int     
declare @slice varchar(8000)     

select @idx = 1     
    if len(@String)<1 or @String is null  return     

while @idx!= 0     
begin     
    set @idx = charindex(@Delimiter,@String)     
    if @idx!=0     
        set @slice = left(@String,@idx - 1)     
    else     
        set @slice = @String     

    if(len(@slice)>0)
        insert into @temptable(Items) values(@slice)     

    set @String = right(@String,len(@String) - @idx)     
    if len(@String) = 0 break     
end 
return     
end

select top 10 * from dbo.split('Chennai,Bangalore,Mumbai',',')

해결법

  1. ==============================

    1.작동 후 -

    작동 후 -

    DECLARE @A VARCHAR (100)= '4,5,6'
    DECLARE @B VARCHAR (100)= 'RXXXXXX'
    DECLARE @RETURN_VALUE BIT = 1 --DEFAULT 1
    
    
    SELECT items
    INTO #STRINGS 
    FROM dbo.split(@A,',')
    
    IF EXISTS(SELECT 1 FROM #STRINGS S WHERE CHARINDEX(items, @B) > 0)
    SET @RETURN_VALUE = 0
    
    PRINT @RETURN_VALUE
    
    DROP TABLE #STRINGS
    

    당신은 수도 사용 대신 CHARINDEX의 CONTAINS -

    IF EXISTS(SELECT 1 FROM #STRINGS S WHERE CONTAINS(items, @B))
    SET @RETURN_VALUE = 0
    
  2. from https://stackoverflow.com/questions/12999631/split-string-by-comma-in-sql-server-2008 by cc-by-sa and MIT license