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

hur man väljer datarad från ett kommaseparerat värdefält

Det är aldrig bra att använda kommaseparerade värden för att lagra i databasen om det är möjligt, försök att skapa separata tabeller för att lagra dem eftersom detta troligen är 1:n förhållande.

Om detta inte är genomförbart finns det följande möjliga sätt att göra detta. Om antalet värden som ska matchas kommer att förbli oförändrade, kanske du vill göra serien Like uttalande tillsammans med OR/AND beroende på dina krav.

Ex.-

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

Men ovanstående fråga kommer sannolikt att fånga alla värden som innehåller 21 så även om kolumner med värden som 1210 ,210 kommer också att returneras. För att övervinna detta kan du göra följande knep som hämmar prestandan eftersom den använder funktioner i where klausul och det går emot att göra Segbar queries.Men nu är det,

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

Om antalet värden som ska matchas kommer att ändras kanske du vill titta på Fulltextindex och du bör tänka på detsamma. Och om du bestämmer dig för att gå med detta efter Fulltext Index du kan göra enligt nedan för att få vad du vill ha,

Ex.-

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


  1. UTF8-problem med MySQL 5

  2. mysqli_real_connect():(HY000/2002):Ingen sådan fil eller katalog

  3. Hur man ställer in användarnamn och lösenord för phpmyadmin

  4. Hur man aktiverar MySQL-databas på XAMPP för Windows