Det är aldrig bra att använda kommaseparerade värden för att lagra i databasen om det är möjligt, försök att skapa separata tabeller för att lagra dem eftersom detta troligen är 1:n
förhållande.
Om detta inte är genomförbart finns det följande möjliga sätt att göra detta. Om antalet värden som ska matchas kommer att förbli oförändrade, kanske du vill göra serien Like
uttalande tillsammans med OR/AND
beroende på dina krav.
Ex.-
WHERE
Media LIKE '%21%'
OR Media LIKE '%30%'
OR Media LIKE '%40%'
Men ovanstående fråga kommer sannolikt att fånga alla värden som innehåller 21
så även om kolumner med värden som 1210
,210
kommer också att returneras. För att övervinna detta kan du göra följande knep som hämmar prestandan eftersom den använder funktioner i where
klausul och det går emot att göra Segbar
queries.Men nu är det,
--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 + ',%'
Om antalet värden som ska matchas kommer att ändras kanske du vill titta på Fulltextindex
och du bör tänka på detsamma. Och om du bestämmer dig för att gå med detta efter Fulltext Index
du kan göra enligt nedan för att få vad du vill ha,
Ex.-
WHERE
CONTAINS(Media, '"21" OR "30" OR "40"')