2012-10-21 33 views
8

Ci sono due stringhe a e bstringa di Spalato da una virgola in SQL Server 2008

La stringa contiene a virgola. Mi piacerebbe dividere una stringa con una virgola, quindi passare attraverso ogni elemento.

Se la stringa b contiene alcun elemento che divise da virgola restituirà 0

(es: a = "4,6,8"; b = "R3799514" perché la stringa b contiene 4 così ritorno 0)

Come raggiungere questo con una procedura memorizzata? Grazie in anticipo!

ho visto una funzione split:

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

Si dovrebbe normalizzare db prima. http://databases.about.com/od/specificproducts/a/normalization.htm –

+2

Migliori funzioni di divisione: http://www.sqlperformance.com/2012/07/t-sql-queries/split-strings e http: //www.sqlperformance.com/2012/08/t-sql-queries/splitting-strings-now-with-less-t-sql –

risposta

6

proceda in questo modo -

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 

È anche possibile utilizzare CONTAINS invece di CHARINDEX -

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

Che tipo di modifica è questa :) –

Problemi correlati