Il n'est jamais bon d'utiliser les valeurs séparées par des virgules pour les stocker dans la base de données si cela est possible, essayez de créer des tables séparées pour les stocker, car il s'agit probablement de 1:n
relation.
Si ce n'est pas faisable, vous pouvez le faire de différentes manières. Si votre nombre de valeurs à faire correspondre reste le même, vous voudrez peut-être faire la série de Like
déclaration avec OR/AND
selon vos besoins.
Ex.-
WHERE
Media LIKE '%21%'
OR Media LIKE '%30%'
OR Media LIKE '%40%'
Cependant, la requête ci-dessus attrapera probablement toutes les valeurs qui contiennent 21
donc même si les colonnes avec des valeurs comme 1210
,210
seront également retournés. Pour surmonter cela, vous pouvez faire l'astuce suivante qui entrave les performances car elle utilise des fonctions dans where
clause et qui va à l'encontre de la création de Seargable
requêtes.Mais voilà,
--Declare valueSearch variable first to value to match for you can do this for multiple values using multiple variables.
Declare @valueSearch = '21'
-- Then do the matching in where clause
WHERE
(',' + RTRIM(Media) + ',') LIKE '%,' + @valueSearch + ',%'
Si le nombre de valeurs à faire correspondre va changer, vous voudrez peut-être consulter Index FullText
et vous devriez penser à la même chose.Et si vous décidez d'y aller après Fulltext Index
vous pouvez faire comme ci-dessous pour obtenir ce que vous voulez,
Ex.-
WHERE
CONTAINS(Media, '"21" OR "30" OR "40"')