Никога не е добре да използвате стойностите, разделени със запетая, за съхраняване в базата данни, ако е възможно, опитайте се да направите отделни таблици, за да ги съхранявате, тъй като най-вероятно това е 1:n
връзка.
Ако това не е осъществимо, тогава има следните възможни начини, по които можете да направите това. Ако броят на стойностите, които ще съвпадат, ще остане същият, тогава може да искате да направите поредица от Like
израз заедно с OR/AND
в зависимост от вашите изисквания.
Напр.-
WHERE
Media LIKE '%21%'
OR Media LIKE '%30%'
OR Media LIKE '%40%'
Въпреки това горната заявка вероятно ще улови всички стойности, които съдържат 21
така че дори ако колони със стойности като 1210
,210
също ще бъдат върнати. За да преодолеете това, можете да направите следния трик, който пречи на производителността, тъй като използва функции в where
клауза и това противоречи на правенето на Seargable
запитвания. Но ето го,
--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 + ',%'
Ако броят на съответстващите стойности ще се промени, тогава може да искате да разгледате FullText Index
и вие трябва да мислите за същото. И ако решите да продължите с това след Fulltext Index
можете да направите както следва, за да получите това, което искате,
Напр.-
WHERE
CONTAINS(Media, '"21" OR "30" OR "40"')