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

come selezionare una riga di dati da un campo con valori separati da virgole

Non è mai opportuno utilizzare i valori separati da virgola per archiviare nel database se è possibile provare a creare tabelle separate per archiviarli poiché molto probabilmente questo è 1:n relazione.

Se ciò non è fattibile, ci sono i seguenti modi possibili per farlo, Se il numero di valori da abbinare rimarrà lo stesso, allora potresti voler fare la serie di Like dichiarazione insieme a OR/AND a seconda delle tue esigenze.

Es.-

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

Tuttavia, la query precedente probabilmente catturerà tutti i valori che contengono 21 quindi anche se colonne con valori come 1210 ,210 verrà anche restituito. Per ovviare a questo puoi fare il seguente trucco che ostacola le prestazioni poiché utilizza le funzioni in where clausola e ciò va contro il rendere Seargable query. Ma ecco qua,

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

Se il numero di valori da abbinare cambierà, potresti voler esaminare Indice FullText e dovresti pensare allo stesso modo. E se decidi di andare con questo dopo Fulltext Index puoi fare come di seguito per ottenere ciò che desideri,

Es.-

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