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()
.
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 slashs
'\'
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-slashs 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).
-
MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION] )
-
MATCH ... AGAINST()
est utilisé pour les recherches en texte plein et retourne une
information de pertinence - pertinence mesuré entre le texte des colonnes
(col1,col2,...)
et la valeur
expr
. La pertinence est un nombre à virgule flottante positif. La pertinence
zéro signifie qu'il n'y a aucune similitude.
MATCH ... AGAINST()
est utilisable dans les
versions 3.23.23 ou suivantes de MySQL. L'extension
IN BOOLEAN MODE
a été ajoutée
dans la version 4.0.1. Pour plus des détails ainsi que des exemples, voir Recherche full-text avec MySQL .
-
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 compatiblité 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-slashs
'\'
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 sensile à la casse.
|