- Catégories :
Fonctions de chaîne et fonctions binaires (Correspondance/Comparaison)
[ NOT ] LIKE¶
Effectue une comparaison sensible à la casse pour déterminer si une chaîne correspond ou non à un modèle spécifié. Pour une correspondance ne respectant pas la casse, utilisez ILIKE à la place.
LIKE, ILIKE et RLIKE effectuent tous des opérations similaires. Cependant, RLIKE utilise la syntaxe POSIX ERE (expression régulière étendue) au lieu de la syntaxe de modèle SQL utilisée par LIKE et ILIKE.
Astuce
Vous pouvez utiliser le service d’optimisation de recherche pour améliorer les performances des requêtes qui appellent cette fonction. Pour plus de détails, voir Service d’optimisation de la recherche.
- Voir aussi:
Syntaxe¶
<subject> [ NOT ] LIKE <pattern> [ ESCAPE <escape> ]
LIKE( <subject> , <pattern> [ , <escape> ] )
Arguments¶
Obligatoire :
subject
Sujet devant correspondre. Il s’agit généralement d’un VARCHAR, bien que d’autres types de données puissent être utilisés.
pattern
Modèle devant correspondre. Il s’agit généralement d’un VARCHAR, bien que d’autres types de données puissent être utilisés.
Facultatif :
escape
Caractère(s) inséré(s) devant un caractère générique pour indiquer que le caractère générique doit être interprété comme un caractère standard et non comme un caractère générique.
Renvoie¶
Renvoie un BOOLEAN ou un NULL.
Lorsque LIKE est spécifié, la valeur est TRUE s’il y a une correspondance. Sinon, renvoie FALSE.
Lorsque NOT LIKE est spécifié, la valeur est TRUE s’il n’y a pas de correspondance. Sinon, renvoie FALSE.
Lorsque LIKE ou NOT LIKE est spécifié, renvoie NULL si l’un des arguments est NULL.
Notes sur l’utilisation¶
Pour inclure des guillemets simples ou d’autres caractères spéciaux dans la correspondance de modèles, vous pouvez utiliser une séquence d’échappement de barre oblique inverse.
NULL ne correspond pas à NULL. En d’autres termes, si le sujet est NULL et le motif est NULL, cela ne sera pas considéré comme une correspondance.
Les caractères génériques SQL sont pris en charge dans le
pattern
:Un trait de soulignement (
_
) correspond à n’importe quel caractère.Un signe de pourcentage (
%
) correspond à toute séquence de zéro caractère ou plus.
Les caractères génériques du
pattern
incluent les caractères de nouvelle ligne (n
) danssubject
comme des correspondances.La correspondance de modèles couvre la chaîne entière. Pour faire correspondre une séquence n’importe où dans une chaîne, commencez et terminez le modèle par
%
.Il n’y a pas de caractère d’échappement par défaut.
Si vous utilisez la barre oblique inverse comme caractère d’échappement, vous devez spécifier l’échappement de la barre oblique inverse tant dans l’expression que dans la clause ESCAPE. Par exemple, la commande suivante spécifie que le caractère d’échappement est la barre oblique inverse, puis utilise ce caractère d’échappement pour rechercher
%
sous forme de littéral (sans le caractère d’échappement,%
serait traité comme un caractère générique) :'SOMETHING%' LIKE '%\\%%' ESCAPE '\\';
Pour obtenir des exemples d’utilisation des caractères d’échappement, et en particulier de la barre oblique inversée en tant que caractère d’échappement, voir Exemples.
Détails du classement¶
Seules les spécifications de classement upper
, lower
, et trim
sont prises en charge. Les combinaisons avec upper
, lower
, et trim
sont également prises en charge (par exemple, upper-trim
et lower-trim
), à l’exception des combinaisons locales (par exemple, en-upper
).
Exemples¶
Créer une table contenant des chaînes :
CREATE OR REPLACE TABLE like_ex(name VARCHAR(20));
INSERT INTO like_ex VALUES
('John Dddoe'),
('John \'alias\' Doe'),
('Joe Doe'),
('John_down'),
('Joe down'),
('Elaine'),
(''), -- empty string
(null);
Les exemples suivants montrent l’utilisation de LIKE
, NOT LIKE
et du caractère générique %
:
SELECT name
FROM like_ex
WHERE name LIKE '%Jo%oe%'
ORDER BY name;
+------------------+
| NAME |
|------------------|
| Joe Doe |
| John Dddoe |
| John 'alias' Doe |
+------------------+
SELECT name
FROM like_ex
WHERE name NOT LIKE '%Jo%oe%'
ORDER BY name;
+-----------+
| NAME |
|-----------|
| |
| Elaine |
| Joe down |
| John_down |
+-----------+
SELECT name
FROM like_ex
WHERE name NOT LIKE 'John%'
ORDER BY name;
+-----------+
| NAME |
|-----------|
| |
| Elaine |
| Joe Doe |
| Joe down |
+-----------+
SELECT name
FROM like_ex
WHERE name NOT LIKE ''
ORDER BY name;
+------------------+
| NAME |
|------------------|
| Elaine |
| Joe Doe |
| Joe down |
| John Dddoe |
| John 'alias' Doe |
| John_down |
+------------------+
L’exemple suivant utilise une barre oblique inverse pour effectuer un échappement d’un guillemet simple afin qu’il puisse être trouvé dans la correspondance de modèles :
SELECT name
FROM like_ex
WHERE name LIKE '%\'%'
ORDER BY name;
+------------------+
| NAME |
|------------------|
| John 'alias' Doe |
+------------------+
Les exemples suivants utilisent une clause ESCAPE :
SELECT name
FROM like_ex
WHERE name LIKE '%J%h%^_do%' ESCAPE '^'
ORDER BY name;
+-----------+
| NAME |
|-----------|
| John_down |
+-----------+
Insérez davantage de lignes dans la table like_ex
:
INSERT INTO like_ex (name) VALUES
('100 times'),
('1000 times'),
('100%');
Sans le caractère d’échappement, le signe de pourcentage (%
) est traité comme un caractère générique :
SELECT * FROM like_ex WHERE name LIKE '100%'
ORDER BY 1;
+------------+
| NAME |
|------------|
| 100 times |
| 100% |
| 1000 times |
+------------+
Avec le caractère d’échappement, le signe de pourcentage (%
) est traité comme un littéral :
SELECT * FROM like_ex WHERE name LIKE '100^%' ESCAPE '^'
ORDER BY 1;
+------+
| NAME |
|------|
| 100% |
+------+
L’exemple suivant utilise une clause ESCAPE dans laquelle la barre oblique inverse est le caractère d’échappement. Notez que la barre oblique inverse elle-même doit être échappée à la fois dans la clause ESCAPE et dans l’expression :
SELECT * FROM like_ex WHERE name LIKE '100\\%' ESCAPE '\\'
ORDER BY 1;
+------+
| NAME |
|------|
| 100% |
+------+