sql >> Database >  >> Database Tools >> SSMS

hoe een gegevensrij te selecteren uit een door komma's gescheiden waardeveld

Het is nooit goed om de door komma's gescheiden waarden te gebruiken om in de database op te slaan. Als het haalbaar is, probeer dan aparte tabellen te maken om ze op te slaan, aangezien dit hoogstwaarschijnlijk 1:n is. relatie.

Als dit niet haalbaar is, zijn er de volgende manieren waarop u dit kunt doen. Als uw aantal overeenkomende waarden hetzelfde blijft, wilt u misschien de reeks Like doen statement samen met OR/AND afhankelijk van uw behoefte.

Bijv.-

WHERE
    Media LIKE '%21%'
    OR Media LIKE '%30%'
    OR Media LIKE '%40%' 

Bovenstaande zoekopdracht zal echter waarschijnlijk alle waarden vangen die 21 . bevatten dus zelfs als kolommen met waarden als 1210 ,210 wordt ook teruggestuurd. Om dit te verhelpen, kun je de volgende truc doen die de uitvoering belemmert, omdat het functies gebruikt in where clausule en dat gaat in tegen het maken van Seargable queries. Maar hier gaat het,

--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 + ',%'

Als het aantal overeenkomende waarden gaat veranderen, kun je het beste kijken naar FullText Index en u zou aan hetzelfde moeten denken. En als u besluit hiermee verder te gaan na Fulltext Index je kunt het onderstaande doen om te krijgen wat je wilt,

Bijv.-

WHERE 
     CONTAINS(Media, '"21" OR "30" OR "40"')


  1. Laravel 7X admin/login keert terug naar admin/login ondanks correcte inloggegevens

  2. Waarom maakt phpmyadmin geen waarden aan voor het type enum?

  3. MySQL Toon null-resultaten in zoekopdracht - met INNER JOIN

  4. hoe kopieer je alleen verschillende waarden van de ene tabel naar de andere in Mysql?