13.3 Fonctions de chaînes de caractères
13 Fonctions à utiliser dans les clauses SELECT et WHERE
Manuel de Référence MySQL 4.1 : Version Française
->Opérateurs de comparaison pour les chaînes de caractères
|
13.3.1 Opérateurs de comparaison pour les chaînes de caractères
MySQL convertit automatiquement les nombres en chaînes et et vice-versa :
mysql> SELECT 1+'1'; -> 2 mysql> SELECT CONCAT(2,' test'); -> '2 test'
|
Si vous devez convertir explicitement un nombre en chaîne,
passez-le en argument de la fonction
CONCAT()
.
mysql> SELECT 38.8, CAST(38.8 AS CHAR); -> 38.8, '38.8' mysql> SELECT 38.8, CONCAT(38.8); -> 38.8, '38.8'
|
CAST()
est recommandée, mais elle a été ajoutée en MySQL 4.0.2.Si une fonction de chaîne de caractères est donnée comme chaîne binaire dans
un argument d'une autre fonction, le résultat sera aussi une chaîne binaire.
Les nombres convertis en chaînes sont traités comme des chaînes binaires.
Cela affecte les comparaisons.
Normalement, si l'une des expressions dans une comparaison de chaîne est sensible
à la casse, la comparaison est exécutée en tenant compte de la casse.
-
expr LIKE pat [ESCAPE 'escape-char']
-
La réalisation d'expression utilisant les expressions régulières simples de comparaison de SQL.
Retourne
1
(TRUE) ou
0
(FALSE).
Avec
LIKE
, vous pouvez utiliser les deux jokers suivants :
Char
|
Description
|
%
|
Remplace n'importe quel nombre de caractères, y compris aucun
|
_
|
Remplace exactement un caractère
|
mysql> SELECT 'David!' LIKE 'David_'; -> 1 mysql> SELECT 'David!' LIKE '%D%v%'; -> 1
|
Pour tester la présence littérale d'un joker, précédez-le d'un caractère d'échappement.
Si vous ne spécifiez pas le caractère d'échappement
ESCAPE
, le caractère
'\'
sera utilisé :
String
|
Description
|
\%
|
Remplace le caractère littéral
'%'
|
\_
|
Remplace le caractère littéral
'_'
|
mysql> SELECT 'David!' LIKE 'David\_'; -> 0 mysql> SELECT 'David_' LIKE 'David\_'; -> 1
|
Pour spécifier un caractère d'échappement différent, utilisez la clause
ESCAPE
:
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|'; -> 1
|
Les deux exemples suivants illustrent le fait que les comparaisons de chaînes
de caractères ne sont pas sensibles à la casse à moins qu'une des opérandes soit
une chaîne binaire.
mysql> SELECT 'abc' LIKE 'ABC'; -> 1 mysql> SELECT 'abc' LIKE BINARY 'ABC'; -> 0
|
LIKE
est également autorisé pour les expressions numériques. (C'est une extension
MySQL à la norme ANSI SQL
LIKE
.)
mysql> SELECT 10 LIKE '1%'; -> 1
|
Note : Comme MySQL utilise la syntaxe d'échappement de caractères du langage C dans les
chaînes (par exemple,
'\n'
), vous devez doubler tous les slash
'\'
que vous utilisez
dans les expressions
LIKE
. Par exemple, pour rechercher les nouvelles lignes (
'\n'
),
vous devez le spécifier comme cela :
'\\n'
. Pour rechercher un anti-slash (
'\'
),
vous devez le spécifier comme cela :
'\\\\'
(les anti-slash sont supprimés
une première fois pas l'analyseur syntaxique, puis une deuxième fois par le moteur
d'expression régulières, ce qui ne laisse qu'un seul anti-slash à la fin).
Note :
actuellement,
LIKE
n'est pas compatible avec les caractères multi-octets.
La comparaison est faîte caractère par caractère.
-
expr NOT LIKE pat [ESCAPE 'escape-char']
-
Equivalent à
NOT (expr LIKE pat [ESCAPE 'escape-char'])
.
-
expr NOT REGEXP pat
-
-
expr NOT RLIKE pat
-
Equivalent à
NOT (expr REGEXP pat)
.
-
expr REGEXP pat
-
-
expr RLIKE pat
-
Effectue une recherche de chaîne avec l'expression régulière
pat
.
Le masque peut être une expression régulière étendue.
Voir la section Expressions régulières de MySQL . Retourne
1
si
expr
correspond au masque
pat
, sinon, retourne
0
.
RLIKE
est un synonyme de
REGEXP
,
fourni pour assurer la compatibilité avec
mSQL
.
Note : Comme MySQL utilise la syntaxe d'échappement de caractères du langage C dans
les chaînes (par exemple,
'\n'
), vous devez doubler tous les anti-slash
'\'
que vous utilisez dans les expressions
REGEXP
. A partir de la version 3.23.4 de
MySQL,
REGEXP
est insensible à la casse pour les comparaisons de chaînes normales (non binaires) :
mysql> SELECT 'Monty!' REGEXP 'm%y%%'; -> 0 mysql> SELECT 'Monty!' REGEXP '.*'; -> 1 mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line'; -> 1 mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A'; -> 1 0 mysql> SELECT 'a' REGEXP '^[a-d]'; -> 1
|
-
STRCMP(expr1,expr2)
-
STRCMP()
retourne
0
si les chaînes sont identiques,
-1
si la première chaîne est plus petite que la seconde et
1
dans les autres cas :
mysql> SELECT STRCMP('text', 'text2'); -> -1 mysql> SELECT STRCMP('text2', 'text'); -> 1 mysql> SELECT STRCMP('text', 'text'); -> 0
|
Depuis MySQL 4.0,
STRCMP()
utilise le jeu de caractères courant
pour effectuer des comparaisons. Cela fait que le comportement par défaut
est la comparaison insensible à la casse, à moins que l'un des deux
opérandes soient une chaîne binaire.
Avant MySQL 4.0,
STRCMP()
était sensible à la casse.
|