2010-10-29 22 views
0

Les caractères génériques SQL "%" et "_" sont bien documentés et largement connus. Cependant, comme w3schools explains, il y a aussi des jokers de type « CharList » pour un seul caractère à l'intérieur ou à l'extérieur d'une plage donnée, par exemple, pour trouver toutes les personnes appelées Carl, mais pas ceux qui sont appelés Earl:Les caractères génériques de type "charlist" font-ils partie de la norme SQL-92?

select * from Person where FirstName like '[A-D]arl' 

... ou pour trouver le contraire, utilisez:

select * from Person where FirstName like '[!A-D]arl' 

ou (selon le SGBDR, probablement):

select * from Person where FirstName like '[^A-D]arl' 

Est-ce type de partie générique de la norme SQL-92 , et quelles bases de données le supportent réellement? Par exemple:

  • Oracle 11g ne supporte pas
  • SQL Server 2005 prend en charge, avec l'opérateur de négation étant les opérateurs "^" (et non "!")
+0

Ne semble pas fonctionner. Doutez fortement que c'est la syntaxe standard ANSI. – bernie

+2

Cela peut être utile: http://stackoverflow.com/questions/712580/list-of-special-characters-for-sql-like-clause –

+0

Cela a été utile, mais votre nom d'utilisateur m'a tout de suite déconcerté! :-) –

Répondre

2

Le standard SQL-99 a un prédicat SIMILAR TO qui utilise le style "charlist" ainsi que les caractères génériques "%" et "_".

Rien de semblable (sans jeu de mots) dans la norme SQL-92, cependant. Juste essayé dans PostgreSQL 8.4 et Teradata.

+0

OK, je vais essayer cela au lieu de LIKE. –

1

Le "CharList" ressemblent à des expressions régulières, ou à un sous-ensemble limité d'entre eux. AFAIK il n'y a pas de syntaxe d'expression régulière spécifiée dans SQL-92 bien que de nombreuses bases de données supportent les regex, et comment elles le supportent varie. Oracle, par exemple, a des fonctions pour effectuer des comparaisons d'expressions régulières et des substitutions. Je ne sais pas comment les autres le font.

Partagez et appréciez.