Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pourquoi l'utilisation d'un caractère de soulignement dans un filtre LIKE me donne-t-il tous les résultats ?

Modifiez votre WHERE condition comme celle-ci :

WHERE mycolumn LIKE '%\_%' ESCAPE '\'

C'est l'une des façons dont Oracle prend en charge les caractères d'échappement. Ici vous définissez le caractère d'échappement avec le escape mot-clé. Pour plus de détails, consultez ce lien sur Oracle Docs.

Le '_' et '%' sont des jokers dans un LIKE instruction opérée en SQL.

Le _ Le caractère recherche la présence d'un (n'importe quel) caractère unique. Si vous recherchez par columnName LIKE '_abc' , il vous donnera un résultat avec des lignes ayant 'aabc' , 'xabc' , '1abc' , '#abc' mais PAS 'abc' , 'abcc' , 'xabcd' et ainsi de suite.

Le '%' Le caractère est utilisé pour faire correspondre 0 ou plusieurs caractères. Cela signifie que si vous recherchez par columnName LIKE '%abc' , cela vous donnera un résultat avec 'abc' , 'aabc' , 'xyzabc' et ainsi de suite, mais pas de 'xyzabcd' , 'xabcdd' et toute autre chaîne qui ne se termine pas par 'abc' .

Dans votre cas, vous avez recherché par '%_%' . Cela donnera toutes les lignes avec cette colonne ayant un ou plusieurs caractères, c'est-à-dire tous les caractères, comme valeur. C'est pourquoi vous obtenez toutes les lignes même s'il n'y a pas de _ dans vos valeurs de colonne.