Det er aldrig godt at bruge de kommaseparerede værdier til at gemme i databasen, hvis det er muligt, prøv at lave separate tabeller til at gemme dem, da dette højst sandsynligt er 1:n
forhold.
Hvis dette ikke er muligt, er der følgende mulige måder, du kan gøre dette på. Hvis dit antal værdier, der skal matches, forbliver det samme, vil du måske lave serien Like
sætning sammen med OR/AND
afhængigt af dit krav.
Eks.-
WHERE
Media LIKE '%21%'
OR Media LIKE '%30%'
OR Media LIKE '%40%'
Men ovenstående forespørgsel vil sandsynligvis fange alle de værdier, som indeholder 21
så selvom kolonner med værdier som 1210
,210
vil også blive returneret. For at overvinde dette kan du gøre følgende trick, som hæmmer ydeevnen, da det bruger funktioner i where
klausul og det går imod at lave Søgbar
queries.Men her gå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 + ',%'
Hvis antallet af værdier, der skal matches, vil ændre sig, vil du måske se på Fuldtekstindeks
og du bør tænke på det samme. Og hvis du beslutter dig for at gå med dette efter Fulltext Index
du kan gøre som nedenfor for at få, hvad du ønsker,
Eks.-
WHERE
CONTAINS(Media, '"21" OR "30" OR "40"')