| 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 : 
 Si vous devez convertir explicitement un nombre en chaîne,
passez-le en argument de la fonction  
CONCAT()
 .| 
mysql> SELECT 1+'1';-> 2
 mysql> SELECT CONCAT(2,' test');
 -> '2 test'
 | 
 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.| 
mysql> SELECT 38.8, CAST(38.8 AS CHAR);-> 38.8, '38.8'
 mysql> SELECT 38.8, CONCAT(38.8);
 -> 38.8, '38.8'
 | 
  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 |  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é :| 
mysql> SELECT 'David!' LIKE 'David_';-> 1
 mysql> SELECT 'David!' LIKE '%D%v%';
 -> 1
 | 
 
| String | Description |  
| \% | Remplace le caractère littéral 
'%' |  
| \_ | Remplace le caractère littéral 
'_' |  Pour spécifier un caractère d'échappement différent, utilisez la clause  
ESCAPE
  :| 
mysql> SELECT 'David!' LIKE 'David\_';-> 0
 mysql> SELECT 'David_' LIKE 'David\_';
 -> 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 'David_' LIKE 'David|_' ESCAPE '|';-> 1
 | 
 LIKE
  est également autorisé pour les expressions numériques. (C'est une extension
MySQL à la norme ANSI SQL  
LIKE
 .)| 
mysql> SELECT 'abc' LIKE 'ABC';-> 1
 mysql> SELECT 'abc' LIKE BINARY 'ABC';
 -> 0
 | 
 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).| 
mysql> SELECT 10 LIKE '1%';-> 1
 | 
 
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 : 
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.| 
mysql> SELECT STRCMP('text', 'text2');-> -1
 mysql> SELECT STRCMP('text2', 'text');
 -> 1
 mysql> SELECT STRCMP('text', 'text');
 -> 0
 | 
 |