web-dev-qa-db-fra.com

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 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%'

SQL Server :

  1. %
  2. _
  3. [spécificateur] E.g. [a-z]
  4. [^ spécificateur]
  5. Clause ESCAPE, par exemple % 30! %% 'ESCAPE'! ' évaluera 30% comme vrai
  6. 'Les caractères doivent être échappés avec' E.g. ils deviennent ils sont

MySQL:

  1. % - Toute chaîne de zéro caractère ou plus.
  2. _ - Un seul caractère
  3. Clause ESCAPE, par exemple % 30! %% 'ESCAPE'! ' évaluera 30% comme vrai

Oracle:

  1. % - Toute chaîne de zéro caractère ou plus.
  2. _ - Un seul caractère
  3. Clause ESCAPE, par exemple % 30! %% 'ESCAPE'! ' évaluera 30% comme vrai

Sybase

  1. %
  2. _
  3. [spécificateur] E.g. [a-z]
  4. [^ spécificateur]

Progression:

  1. % - Toute chaîne de zéro caractère ou plus.
  2. _ - Un seul caractère

    Guide de référence ici [PDF]

PostgreSQL:

  1. % - Toute chaîne de zéro caractère ou plus.
  2. _ - Un seul caractère
  3. Clause ESCAPE, par exemple % 30! %% 'ESCAPE'! ' évaluera 30% comme vrai

ANSI SQL92:

  1. %
  2. _
  3. Un caractère ESCAPE uniquement si spécifié .

PostgreSQL a également l’opérateur SIMILAR TO qui ajoute ce qui suit:

  1. [specifier]
  2. [^specifier]
  3. | - l'une des deux alternatives
  4. * - répétition du point précédent zéro fois ou plus.
  5. + - répétition de l'élément précédent une ou plusieurs fois.
  6. () - regroupe les éléments

L'idée est de faire de ce Wiki une communauté pouvant devenir un "guichet unique" pour cela.

113
Jonathan Parker

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.

21
Çağdaş Tekin

ANSI SQL92 :

  • %
  • _
  • un caractère ESCAPE uniquement si spécifié .

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

6
bobince

Vous devez ajouter que vous devez ajouter un extra 'pour échapper à un existant' dans SQL Server:

forgerons -> forgeron

5
Heather M

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."
1
Learning

Réponse potentielle pour SQL Server

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.

0
jpierson