Quelle est la liste complète de tous les caractères spéciaux pour une clause SQL (je suis intéressé par SQL Server mais les autres seraient également utiles) LIKE?
Par exemple.
SELECT Name FROM Person WHERE Name LIKE '%Jon%'
%
- Toute chaîne de zéro caractère ou plus._
- Un seul caractère%
- Toute chaîne de zéro caractère ou plus._
- Un seul caractèreSybase
%
- Toute chaîne de zéro caractère ou plus._
- Un seul caractère
Guide de référence ici [PDF]
%
- Toute chaîne de zéro caractère ou plus._
- Un seul caractèrePostgreSQL a également l’opérateur SIMILAR TO
qui ajoute ce qui suit:
[specifier]
[^specifier]
|
- l'une des deux alternatives*
- répétition du point précédent zéro fois ou plus.+
- répétition de l'élément précédent une ou plusieurs fois.()
- regroupe les élémentsL'idée est de faire de ce Wiki une communauté pouvant devenir un "guichet unique" pour cela.
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 livre avec le mot 'ordinateur' n'importe où dans le titre du livre.
_ Un seul personnage.
WHERE au_fname LIKE '_ean'
trouve tous les prénoms de quatre lettres qui se terminent par ean (Dean, Sean, etc.).
[] Tout caractère unique compris dans la plage spécifiée ([a-f]) ou défini ([abcdef]).
WHERE au_lname LIKE '[C-P]arsen'
trouve les noms de famille des auteurs se terminant par arsen et commençant par tout caractère compris 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 ne se trouvant pas dans la plage spécifiée ([^ a-f]) ou défini ([^ abcdef]).
WHERE au_lname LIKE 'de[^l]%'
tous les noms de famille d'auteur commençant par de et où la lettre suivante n'est pas l.
Il est décevant que de nombreuses bases de données ne se conforment pas aux règles standard et n’ajoutent pas de caractères supplémentaires, ou n’activent pas de manière incorrecte ESCAPE avec une valeur par défaut de "\" lorsqu’elle est manquante. 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 indique 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
Vous devez ajouter que vous devez ajouter un extra 'pour échapper à un existant' dans SQL Server:
forgerons -> forgeron
Sybase:
% : Matches any string of zero or more characters.
_ : Matches a single character.
[specifier] : Brackets enclose ranges or sets, such as [a-f]
or [abcdef].Specifier can take two forms:
rangespec1-rangespec2:
rangespec1 indicates the start of a range of characters.
- is a special character, indicating a range.
rangespec2 indicates the end of a range of characters.
set:
can be composed of any discrete set of values, in any
order, such as [a2bR].The range [a-f], and the
sets [abcdef] and [fcbdae] return the same
set of values.
Specifiers are case-sensitive.
[^specifier] : A caret (^) preceding a specifier indicates
non-inclusion. [^a-f] means "not in the range
a-f"; [^a2bR] means "not a, 2, b, or R."
Intéressant Je viens de lancer un test avec LinqPad avec SQL Server, qui devrait simplement exécuter Linq to SQL et créer l’instruction SQL suivante.
Records .Where (r => r.Name.Contains ("lkjwer --_ ~ []"))
-- Region Parameters
DECLARE @p0 VarChar(1000) = '%lkjwer--~_~~~[]%'
-- EndRegion
SELECT [t0].[ID], [t0].[Name]
FROM [RECORDS] AS [t0]
WHERE [t0].[Name] LIKE @p0 ESCAPE '~'
Donc, je ne l'ai pas encore testé, mais il semble que le mot clé ESCAPE '~'
puisse permettre l'échappement automatique d'une chaîne pour une utilisation dans une expression similaire.