Domanda

Sto cercando di trovare un modo per interrogare righe di dati utilizzando una colonna "multivalore" pipe delimitato in un altro tavolo come una clausola WHERE. SQL Server 2005

Questa è la mia migliore descrizione del problema:

Immaginate una colonna pipe delimitata impostata su una variabile come @LIST = 'Bob | Maria | Joe'

quindi sto cercando di trovare una corrispondenza come questo

Select * from Users where FirstName = 'Joe'

, ma esteso ad essere

Select * from Users where FirstName "IS CONTAINED IN" @List

, che sarebbe tornato tutte le voci di Bob, Mary e Joe. Grazie per il vostro aiuto.

È stato utile?

Soluzione

È possibile utilizzare un UDF dividere e unire al vostro query principale. vedere questo link per il codice e un esempio. La query potrebbe finire per assomigliare questo. Questo non è testato, ma spero che questo si punta nella direzione giusta.

Select A.* from Users A JOIN dbo.Fn_Split(@ValueArrayString, '|') B on A.FirstName = B.value 

Altri suggerimenti

Come su

Select * from Users where CHARINDEX(FirstName + '|', @List + '|') > 0

Un po 'fastidioso che si deve aggiungere il delimitatore tubo per entrambe le stringhe, ma funziona, ed è probabilmente più veloce di una funzione.

Mi piace la soluzione di MrTelly. Tuttavia, è solo prendersi cura della metà dei falsi-positivi. La soluzione completa è la seguente:

Select * from Users where CHARINDEX('|' + FirstName + '|', '|' + @List + '|') > 0

Il tubo deve essere aggiunto ad entrambe le estremità

Controlla la funzione PATINDEX (). E 'un po' limitato, ma dovrebbe fare quello che stai cercando.

Vedi UDF ___ Txt_SplitTab di Andrew Novick

Select * from Users where FirstName IN (Select Item From udf_Txt_SplitTAB (@LIST, '|'))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top