2012-10-21 163 views
8

有两个字符串ab分割字符串用逗号2008

a字符串包含逗号。我想用逗号分割一个字符串,然后遍历每个元素。

IF的b串包含分割用逗号将返回任何元素0

(例如:A = "4,6,8"; B = "R3799514"因为b字符串包含4,从而返回0)

如何实现这个用存储过程?提前致谢!

我看到一个分裂的功能:

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',',') 
+0

你应该先正常化分贝。 http://databases.about.com/od/specificproducts/a/normalization.htm –

+2

更好的拆分功能:http://www.sqlperformance.com/2012/07/t-sql-queries/split-strings和http: //www.sqlperformance.com/2012/08/t-sql-queries/splitting-strings-now-with-less-t-sql –

回答

6

下面的工作 -

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 

您还可以使用CONTAINS代替CHARINDEX -

IF EXISTS(SELECT 1 FROM #STRINGS S WHERE CONTAINS(items, @B)) 
SET @RETURN_VALUE = 0 
+1

这是什么样的编辑:) –

相关问题