SSMS
 sql >> Base de données >  >> Database Tools >> SSMS

comment sélectionner une ligne de données à partir d'un champ de valeurs séparées par des virgules

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"')