Nigdy nie jest dobrze używać wartości oddzielonych przecinkami do przechowywania w bazie danych, jeśli jest to wykonalne, spróbuj utworzyć oddzielne tabele do ich przechowywania, ponieważ najprawdopodobniej jest to 1:n
związek.
Jeśli nie jest to możliwe, możesz to zrobić w następujący sposób:Jeśli liczba wartości do dopasowania pozostanie taka sama, możesz wykonać serię Like
oświadczenie wraz z OR/AND
w zależności od wymagań.
Np.-
WHERE
Media LIKE '%21%'
OR Media LIKE '%30%'
OR Media LIKE '%40%'
Jednak powyższe zapytanie prawdopodobnie przechwyci wszystkie wartości zawierające 21
więc nawet jeśli kolumny z wartościami takimi jak 1210
,210
również zostanie zwrócony. Aby rozwiązać ten problem, możesz wykonać następującą sztuczkę, która zmniejsza wydajność, ponieważ używa funkcji w where
klauzula i to jest sprzeczne z tworzeniem Pargable
zapytania.Ale oto idzie,
--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 + ',%'
Jeśli liczba wartości do dopasowania ma się zmienić, możesz zajrzeć do Indeks pełnotekstowy
i powinieneś pomyśleć o tym samym. A jeśli zdecydujesz się na to po Fulltext Index
możesz zrobić, co poniżej, aby uzyskać to, czego chcesz,
Np.-
WHERE
CONTAINS(Media, '"21" OR "30" OR "40"')