Comment comparer deux valeurs de colonne qui sont des valeurs séparées par des virgules?

J'ai une table avec des colonnes spécifiques, en ce qu'il y a une colonne qui contient des valeurs séparées par des virgules comme test, examen, résultat, autre .

Je vais passer une string comme result, sample, unknown, extras en tant que paramètre de la procédure stockée. et puis je veux get les loggings liés en vérifiant chaque phrase dans cette string.

Par exemple:

TableA

ID Name Words 1 samson test,exam,result,other 2 john sample,no query 3 smith tester,SE 

Maintenant, je veux searchr le résultat, l'échantillon, inconnu, extras

Ensuite, le résultat devrait être

 ID Name Words 1 samson test,exam,result,other 2 john sample,no query 

parce que dans le premier résultat d' logging correspond et dans le deuxième échantillon d' logging correspond.

Ce n'est pas un super design, tu sais. Mieux vaut séparer les mots dans un tableau séparé (id, mot).

Cela dit, cela devrait faire l'affaire:

 set nocount on declare @words varchar(max) = 'result,sample,unknown,extras' declare @split table (word varchar(64)) declare @word varchar(64), @start int, @end int, @stop int -- ssortingng split in 8 lines select @words += ',', @start = 1, @stop = len(@words)+1 while @start < @stop begin select @end = charindex(',',@words,@start) , @word = rsortingm(lsortingm(subssortingng(@words,@start,@end-@start))) , @start = @end+1 insert @split values (@word) end select * from TableA a where exists ( select * from @split w where charindex(','+w.word+',',','+a.words+',') > 0 ) 

Puis-je brûler en enfer DBA pour vous fournir cela!

Edit: remplacé STUFF w / SUBSTRING tranchage, un ordre de grandeur plus rapide sur les longues lists.

Personnellement, je pense que vous voudriez regarder votre application / architecture et réfléchir soigneusement si vous voulez vraiment faire cela dans la database ou l'application. Si ce n'est pas approprié ou pas une option, vous devrez créer une fonction personnalisée. Le code dans l'article ici devrait être assez facile à modifier pour faire ce que vous voulez:

T-SQL rapide pour parsingr une string délimitée (regardez aussi le code dans les commentaires)

Comme les autres l'ont déjà dit – ce que vous avez là est un mauvais design. Envisagez d'utiliser des relations appropriées pour représenter ces choses.

Cela étant dit, voici un article détaillé sur la façon de le faire en utilisant SQL Server: http://www.sommarskog.se/arrays-in-sql-2005.html

Une chose que personne n'a encore couverte, parce que c'est souvent une très mauvaise idée – mais alors, vous travaillez déjà avec une mauvaise idée, et parfois deux torts font un droit – est d'extraire toutes les lignes qui correspondent à TOUTES vos strings (en utilisant LIKE ou autre) et en faisant l'intersection vous-même, côté client. Si vos strings sont assez rares et fortement corrélées, cela peut fonctionner plutôt bien; ce sera terrible dans la plupart des autres cas.