Nikdy není dobré používat hodnoty oddělené čárkami k ukládání do databáze, pokud je to možné, zkuste vytvořit samostatné tabulky pro jejich uložení, protože s největší pravděpodobností je to 1:n
vztah.
Pokud to není možné, existují následující možné způsoby, jak to udělat:Pokud počet hodnot, které se mají shodovat, zůstane stejný, možná budete chtít udělat sérii Like
spolu s OR/AND
v závislosti na vašem požadavku.
Př.-
WHERE
Media LIKE '%21%'
OR Media LIKE '%30%'
OR Media LIKE '%40%'
Výše uvedený dotaz však pravděpodobně zachytí všechny hodnoty, které obsahují 21
takže i když sloupce s hodnotami jako 1210
,210
bude také vrácen. Chcete-li to překonat, můžete provést následující trik, který brzdí výkon, protože používá funkce v where
klauzule a to je v rozporu s vytvářením Sargable
dotazy. Ale je to tady,
--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 + ',%'
Pokud se počet hodnot ke shodě změní, možná budete chtít nahlédnout do Fulltextový index
a měli byste přemýšlet o tom samém. A pokud se rozhodnete jít s tímto po Fulltext Index
můžete udělat, jak je uvedeno níže, abyste získali, co chcete,
Př.-
WHERE
CONTAINS(Media, '"21" OR "30" OR "40"')