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

hvordan man vælger datarække fra et kommasepareret værdifelt

Det er aldrig godt at bruge de kommaseparerede værdier til at gemme i databasen, hvis det er muligt, prøv at lave separate tabeller til at gemme dem, da dette højst sandsynligt er 1:n forhold.

Hvis dette ikke er muligt, er der følgende mulige måder, du kan gøre dette på. Hvis dit antal værdier, der skal matches, forbliver det samme, vil du måske lave serien Like sætning sammen med OR/AND afhængigt af dit krav.

Eks.-

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

Men ovenstående forespørgsel vil sandsynligvis fange alle de værdier, som indeholder 21 så selvom kolonner med værdier som 1210 ,210 vil også blive returneret. For at overvinde dette kan du gøre følgende trick, som hæmmer ydeevnen, da det bruger funktioner i where klausul og det går imod at lave Søgbar queries.Men her gå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 + ',%'

Hvis antallet af værdier, der skal matches, vil ændre sig, vil du måske se på Fuldtekstindeks og du bør tænke på det samme. Og hvis du beslutter dig for at gå med dette efter Fulltext Index du kan gøre som nedenfor for at få, hvad du ønsker,

Eks.-

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


  1. Viser rækkeantal fra SQL-server til program

  2. Transponering af grupper af rækker med samme ID til en anden tabel

  3. SSRS-poster vises ikke, når (Vælg alle) bruges, men er det, når du vælger en bestemt værdi

  4. SQL Server Management Studio vil ikke starte - Typebiblioteket blev ikke fundet