Quelle est la liste complète de tous les caractères spéciaux pour une clause LIKE SQL (je suis intéressé par SQL Server mais d'autres seraient bien aussi)?
Par exemple
SELECT Name FROM Person WHERE Name LIKE '%Jon%'
- %
- _
- [spécificateur] Par exemple [az]
- [^ spécificateur]
- Clause ESCAPE Exemple:% 30! %% 'ESCAPE'! ' évaluera 30% comme vrai
- 'les personnages doivent être échappés avec' Par exemple, ils deviennent ils 'sont
%
- Toute chaîne de zéro ou plusieurs caractères._
- Tout caractère unique- Clause ESCAPE Exemple:% 30! %% 'ESCAPE'! ' évaluera 30% comme vrai
%
- Toute chaîne de zéro ou plusieurs caractères._
- Tout caractère unique- Clause ESCAPE Exemple:% 30! %% 'ESCAPE'! ' évaluera 30% comme vrai
Sybase
- %
- _
- [spécificateur] Par exemple [az]
- [^ spécificateur]
%
- Toute chaîne de zéro ou plusieurs caractères._
- Tout caractère uniqueGuide de référence ici [PDF]
%
- Toute chaîne de zéro ou plusieurs caractères._
- Tout caractère unique- Clause ESCAPE Exemple:% 30! %% 'ESCAPE'! ' évaluera 30% comme vrai
- %
- _
- Un caractère ESCAPE uniquement s'il est spécifié .
PostgreSQL a également l' SIMILAR TO
opérateur qui ajoute ce qui suit:
[specifier]
[^specifier]
|
- l'une des deux alternatives*
- répétition zéro ou plusieurs fois de l'élément précédent.+
- répétition de l'élément précédent une ou plusieurs fois.()
- regrouper les éléments
L'idée est d'en faire un Wiki communautaire qui peut devenir un "guichet unique" pour cela.
sql
special-characters
sql-like
a_horse_with_no_name
la source
la source
LIKE
; par exempleWHERE familyname = 'O''Toole'
. Troisièmement, l'SIMILAR TO
opérateur introduit une sorte d'expression régulière hybride, qui a ses propres caractéristiques (et beaucoup plus de caractères spéciaux), donc ne devrait probablement pas être incluse ici. Je suppose que cela fait 3 commentaires, mais personne ne s'attend à l'Inquisition espagnole.Réponses:
Pour SQL Server, à partir de http://msdn.microsoft.com/en-us/library/ms179859.aspx :
% Toute chaîne de zéro caractère ou plus.
WHERE title LIKE '%computer%'
trouve tous les titres de livres avec le mot «ordinateur» n'importe où dans le titre du livre._ Tout caractère unique.
WHERE au_fname LIKE '_ean'
trouve tous les prénoms à quatre lettres qui se terminent par ean (Dean, Sean, etc.).[] Tout caractère unique dans la plage spécifiée ([af]) ou dans l'ensemble ([abcdef]).
WHERE au_lname LIKE '[C-P]arsen'
trouve les noms de famille des auteurs se terminant par arsen et commençant par n'importe quel caractère entre C et P, par exemple Carsen, Larsen, Karsen, etc. Dans les recherches par plage, les caractères inclus dans la plage peuvent varier en fonction des règles de tri du classement.[^] Tout caractère unique hors de la plage spécifiée ([^ af]) ou de l'ensemble ([^ abcdef]).
WHERE au_lname LIKE 'de[^l]%'
tous les noms d'auteurs commençant par de et où la lettre suivante n'est pas l.la source
ANSI SQL92 :
Il est décevant que de nombreuses bases de données ne respectent pas les règles standard et ajoutent des caractères supplémentaires, ou n'activent pas correctement ESCAPE avec une valeur par défaut de «\» lorsqu'il manque. Comme si nous n'avions pas déjà assez de problèmes avec '\'!
Il est impossible d'écrire du code indépendant du SGBD ici, car vous ne savez pas quels caractères vous allez devoir échapper, et la norme dit que vous ne pouvez pas échapper à des choses qui n'ont pas besoin d'être échappées. (Voir section 8.5 / Règles générales / 3.a.ii.)
Merci SQL! gnnn
la source
Vous devez ajouter que vous devez ajouter un supplément 'pour échapper à une exécution' dans SQL Server:
smith's -> smith's
la source
Sybase:
la source
Réponse potentielle pour SQL Server
Intéressant Je viens de lancer un test en utilisant LinqPad avec SQL Server qui devrait simplement exécuter Linq to SQL en dessous et il génère l'instruction SQL suivante.
Enregistrements .Where (r => r.Name.Contains ("lkjwer --_ ~ []"))
Je ne l'ai donc pas encore testé, mais il semble que le
ESCAPE '~'
mot clé puisse permettre l'échappement automatique d'une chaîne à utiliser dans une expression similaire.la source
ESCAPE
parce que cela permet d'utiliser deux caractères par caractère échappé (par exemple,%
devient~%
) au lieu de trois (par exemple, sansESCAPE
,%
devient[%]
).