sql >> Base de Datos >  >> Database Tools >> SSMS

cómo seleccionar una fila de datos de un campo de valor separado por comas

Nunca es bueno usar los valores separados por comas para almacenarlos en la base de datos, si es factible, intente hacer tablas separadas para almacenarlos, ya que lo más probable es que sea 1:n relación.

Si esto no es factible, existen las siguientes formas posibles de hacerlo. Si la cantidad de valores para hacer coincidir va a permanecer igual, entonces es posible que desee hacer la serie de Like instrucción junto con OR/AND dependiendo de su requerimiento.

Ej.-

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

Sin embargo, es probable que la consulta anterior capture todos los valores que contienen 21 así que incluso si las columnas con valores como 1210 ,210 también será devuelto. Para superar esto, puede hacer el siguiente truco que obstaculiza el rendimiento, ya que usa funciones en where y eso va en contra de hacer Seargable consultas.Pero aquí va,

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

Si la cantidad de valores para hacer coincidir va a cambiar, es posible que desee buscar en Índice de texto completo y deberías pensar en lo mismo. Y si decides seguir con esto después del Fulltext Index puede hacer lo siguiente para obtener lo que desea,

Ej.-

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