Consulta SQL para buscar en un campo con separador de comas.
Tengo una tabla con la siguiente estructura, en SQL Server 2012 (simplificado para mostrar):
Id | Val
—-+———-
1 | 1, 2
2 | 1, 3
3 | 1
4 | 2, 3, 4
Tengo un procedimiento almacenado con una lista de @valIds
que contiene todos los valores de Val
que me gustaría solicitar, por ejemplo, 2, 3
o 3
.
En el primer caso, me gustaría que se devuelvan las filas 1, 2 y 4 porque contienen 2 o 3.
En el segundo caso, me gustaría que se devuelvan las filas 2 y 4 porque contienen 3.
Aquí hay un fiddle para reproducir la estructura: http://sqlfiddle.com/#!18/ff399/2
No puedo entender cómo dividir el campo Val
para buscar en él y obtener los resultados mencionados anteriormente. ¿Alguien puede ayudarme?
Ten en cuenta que el separador es Coma-Espacio, no solo Coma. No estoy seguro de si se puede utilizar STRING_SPLIT
aquí.
Gracias
davy.ai
Para buscar valores en el campo
Val
usando una lista de valores suministrados en@valIds
, puedes usar la funciónCHARINDEX
para verificar si cada valor en la lista aparece en el campoVal
. Aquí tienes un ejemplo de procedimiento almacenado:Este procedimiento almacenado verifica si el campo
Id
o el campoVal
contiene alguno de los valores en@valIds
. También verifica que@valIds
esté rodeado de comas para evitar coincidencias parciales (es decir, buscar3
también coincidiría con33
).Puedes llamar al procedimiento almacenado de la siguiente manera:
Esto devolverá las filas 1, 2 y 4. Si llamas al procedimiento almacenado solo con
3
, devolverá las filas 2 y 4.