sql >> Databáze >  >> Database Tools >> SSMS

jak vybrat datový řádek z pole hodnot oddělených čárkami

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"')


  1. Zobrazení schématu sady výsledků v SQL Server Management Studio

  2. Dotaz MySQL k získání modálních průměrů sloupce?

  3. Tato tabulka neobsahuje jedinečný sloupec. Funkce úpravy mřížky, zaškrtávací políčko, Upravit, Kopírovat a Smazat nejsou dostupné

  4. Nastavení více databází MySQL