Liste des caractères spéciaux pour la clause SQL LIKE

Quelle est la liste complète de tous les caractères spéciaux pour un SQL (je suis intéressé par SQL Server mais les autres seraient bien aussi) LIKE clause?

Par exemple

SELECT Name FROM Person WHERE Name LIKE '%Jon%' 

SQL Server :

  1. %
  2. _
  3. [spécificateur] Eg [az]
  4. [^ spécificateur]
  5. Clause ESCAPE Par exemple% 30! %% ‘ESCAPE’! ‘ évaluera 30% comme vrai
  6. “Les personnages doivent être échappés avec” Par exemple, ils deviennent, ils sont

MySQL:

  1. % – Toute chaîne de zéro ou plusieurs caractères.
  2. _ – N’importe quel caractère
  3. Clause ESCAPE Par exemple% 30! %% ‘ESCAPE’! ‘ évaluera 30% comme vrai

Oracle:

  1. % – Toute chaîne de zéro ou plusieurs caractères.
  2. _ – N’importe quel caractère
  3. Clause ESCAPE Par exemple% 30! %% ‘ESCAPE’! ‘ évaluera 30% comme vrai

Sybase

  1. %
  2. _
  3. [spécificateur] Eg [az]
  4. [^ spécificateur]

Le progrès:

  1. % – Toute chaîne de zéro ou plusieurs caractères.
  2. _ – N’importe quel caractère

    Guide de référence ici [PDF]

PostgreSQL:

  1. % – Toute chaîne de zéro ou plusieurs caractères.
  2. _ – N’importe quel caractère

ANSI SQL92:

  1. %
  2. _
  3. Un caractère ESCAPE uniquement s’il est spécifié .

PostgreSQL possède également l’opérateur SIMILAR TO qui ajoute les éléments suivants:

  1. [specifier]
  2. [^specifier]
  3. | – l’une des deux alternatives
  4. * – répétition de l’élément précédent zéro ou plusieurs fois.
  5. + – répétition de l’élément précédent une ou plusieurs fois.
  6. () – regrouper des éléments

L’idée est de faire de cette communauté un wiki qui puisse devenir un guichet unique pour cela.

Pour SQL Server, consultez la page http://msdn.microsoft.com/en-us/library/ms179859.aspx :

  • % Toute chaîne de zéro ou plusieurs caractères.

    WHERE title LIKE '%computer%' trouve tous les titres de livres avec le mot ‘computer’ n’importe où dans le titre du livre.

  • _ N’importe quel caractère.

    WHERE au_fname LIKE '_ean' trouve tous les prénoms de quatre lettres se WHERE au_fname LIKE '_ean' par ean (Dean, Sean, etc.).

  • [] N’importe quel caractère dans la plage spécifiée ([af]) ou set ([abcdef]).

    WHERE au_lname LIKE '[CP]arsen' trouve les noms de l’auteur 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 sorting du classement.

  • [^] N’importe quel caractère ne figurant pas dans la plage spécifiée ([^ af]) ou défini ([^ abcdef]).

    WHERE au_lname LIKE 'de[^l]%' tout auteur nom de famille commençant par de et où la lettre suivante n’est pas l.

ANSI SQL92 :

  • %
  • _
  • un caractère ESCAPE uniquement s’il est spécifié .

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 activent incorrectement ESCAPE avec une valeur par défaut de ‘\’ lorsqu’il est manquant. Comme nous n’avons 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 devrez é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

Vous devez append que vous devez append un “pour échapper à un exising” dans SQL Server:

smith’s -> smith’s

Sybase:

 % : Matches any ssortingng of zero or more characters. _ : Matches a single character. [specifier] : Brackets enclose ranges or sets, such as [af] 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 [af], 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. [^af] means "not in the range af"; [^a2bR] means "not a, 2, b, or R." 

Réponse potentielle pour SQL Server

Intéressant Je viens de lancer un test avec LinqPad avec SQL Server qui devrait juste exécuter Linq to SQL en dessous et il génère 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 '~' 

Je ne l’ai donc pas encore testé, mais il semble que le mot-clé ESCAPE '~' puisse potentiellement permettre l’échappement automatique d’une chaîne pour une expression similaire.