Recherche efficace de valeurs séparées par des virgules dans les colonnes SQL Server
Travailler avec des tableaux contenant des valeurs séparées par des virgules présente souvent des défis lorsque l'on tente de filtrer des lignes en fonction de la présence d'une valeur spécifique dans ces colonnes. Cet article décrit des méthodes fiables pour y parvenir dans SQL Server.
Pièges courants
Une approche naïve pourrait impliquer l'utilisation du mot-clé IN
:
<code class="language-sql">SELECT id_column FROM table_name WHERE 'Cat' IN COLUMN</code>
Cependant, cela est inefficace. L'opérateur IN
vérifie une correspondance exacte par rapport aux valeurs individuelles de l'ensemble, et non au contenu de la chaîne d'une colonne.
De même, l'utilisation de CONTAINS()
ou LIKE
peut conduire à des résultats inexacts. CONTAINS()
est sensible aux correspondances partielles (par exemple, trouver « cheval » dans « hippocampe »), tandis que LIKE
nécessite une manipulation prudente des virgules de début et de fin pour éviter les faux négatifs. La recherche de '%needle%'
peut manquer des entrées telles que ',needle,'
ou 'needle,'
.
Une solution robuste
Une méthode plus fiable consiste à ajouter stratégiquement des virgules aux deux extrémités de la chaîne de recherche et à la valeur de la colonne avant la comparaison. Cela garantit une correspondance exacte, évitant ainsi les faux positifs :
<code class="language-sql">WHERE (',' + RTRIM(MyColumn) + ',') LIKE '%,' + @search + ',%'</code>
Cette technique isole efficacement la valeur cible, garantissant que seules les correspondances exactes sont identifiées, quelle que soit la position de la valeur dans la chaîne délimitée par des virgules. Cette approche offre un moyen beaucoup plus précis et fiable de rechercher des valeurs spécifiques dans des colonnes séparées par des virgules dans SQL Server.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!