SSMS
 sql >> Datenbank >  >> Database Tools >> SSMS

So wählen Sie eine Datenzeile aus einem kommagetrennten Wertfeld aus

Es ist nie gut, die durch Kommas getrennten Werte zum Speichern in der Datenbank zu verwenden, wenn es möglich ist, versuchen Sie, separate Tabellen zu erstellen, um sie zu speichern, da dies höchstwahrscheinlich 1:n ist Beziehung.

Wenn dies nicht machbar ist, gibt es folgende Möglichkeiten, dies zu tun:Wenn die Anzahl der abzugleichenden Werte gleich bleibt, sollten Sie die Reihe von Like ausführen Anweisung zusammen mit OR/AND je nach Anforderung.

Bsp.-

WHERE
    Media LIKE '%21%'
    OR Media LIKE '%30%'
    OR Media LIKE '%40%' 

Die obige Abfrage wird jedoch wahrscheinlich alle Werte erfassen, die 21 enthalten also auch wenn Spalten mit Werten wie 1210 ,210 wird auch zurückgeschickt. Um dies zu überwinden, können Sie den folgenden Trick anwenden, der die Leistung beeinträchtigt, da er Funktionen in where verwendet Klausel und das widerspricht der Erstellung von durchsuchbar Abfragen. Aber los geht's,

--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 + ',%'

Wenn sich die Anzahl der abzugleichenden Werte ändert, sollten Sie sich Volltextindex und Sie sollten darüber nachdenken. Und wenn Sie sich dafür entscheiden, nach Fulltext Index zu gehen Sie können wie folgt vorgehen, um zu bekommen, was Sie wollen,

Bsp.-

WHERE 
     CONTAINS(Media, '"21" OR "30" OR "40"')