Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fonctionnement de la fonction LOCATE() dans MySQL

Dans MySQL, le LOCATE() La fonction renvoie la position d'une sous-chaîne dans une chaîne. Plus précisément, il renvoie la position de la première occurrence dans la chaîne, ou la première occurrence après un point de départ donné.

Syntaxe

Il peut être utilisé de l'une des manières suivantes :

LOCATE(substr,str)
LOCATE(substr,str,pos)

substr est la sous-chaîne à localiser, et str est la chaîne à rechercher.

Lors de l'utilisation de la deuxième syntaxe, pos est la position pour commencer la recherche.

Exemple 1 – Première syntaxe

Voici un exemple utilisant la première syntaxe :

SELECT LOCATE('cat', 'One cat jumped over the other cat') AS Result;

Résultat :

+--------+
| Result |
+--------+
|      5 |
+--------+

Exemple 2 – Seconde syntaxe

Voici un exemple dans lequel nous spécifions une position de départ pour lancer la recherche :

SELECT LOCATE('cat', 'One cat jumped over the other cat', 6) AS Result;

Résultat :

+--------+
| Result |
+--------+
|     31 |
+--------+

Dans ce cas, la première occurrence de cat commence à la position 5, mais j'ai spécifié que la recherche devait commencer à la position 6. Par conséquent, la position de la prochaine occurrence de cette chaîne était celle qui était renvoyée.

Notez que, bien que la recherche ait commencé à la position 6, la fonction renvoie toujours la position de la sous-chaîne dans la chaîne - pas à partir de la position de départ.

Voici un autre exemple pour aider à rendre cela plus clair.

SELECT 
  LOCATE('c', 'a b c', 1) AS 'Result 1',
  LOCATE('c', 'a b c', 2) AS 'Result 2',
  LOCATE('c', 'a b c', 4) AS 'Result 3';

Résultat :

+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        5 |        5 |        5 |
+----------+----------+----------+

Le résultat est le même, peu importe où nous commençons la recherche.

Exemple 3 - Localisation d'une partie d'un mot

La sous-chaîne peut faire partie d'un mot plus long :

SELECT LOCATE('sing', 'Increasingly') AS Result;

Résultat :

+--------+
| Result |
+--------+
|      7 |
+--------+

En fait, il n'est même pas nécessaire qu'il s'agisse d'un mot (après tout, nous recherchons simplement une chaîne) :

SELECT 
  LOCATE('z23!#', 'u_4, z23!#') AS 'Result 1',
  LOCATE(' ', 'a b c') AS 'Result 2',
  LOCATE(',', 'cat, dog, bird') AS 'Result 3';

Résultat :

+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        6 |        2 |        4 |
+----------+----------+----------+

Exemple 4 – Aucune correspondance

Si la sous-chaîne est introuvable, 0 est renvoyé :

SELECT LOCATE('Bat', 'Increasingly') AS Result;

Résultat :

+--------+
| Result |
+--------+
|      0 |
+--------+

Exemple 5 – Sensibilité à la casse

Cette fonction est sécurisée sur plusieurs octets et est sensible à la casse uniquement si au moins un argument est une chaîne binaire.

Par conséquent, ce qui suit fonctionne sur des chaînes non binaires, même si la casse ne correspond pas :

SELECT LOCATE('Sing', 'Increasingly') AS Result;

Résultat :

+--------+
| Result |
+--------+
|      7 |
+--------+

Mais si nous utilisons une chaîne binaire, cela se produit :

SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('Sing', @str) AS Result;

Résultat :

+--------+
| Result |
+--------+
|      0 |
+--------+

Mais bien sûr, si nous le modifions pour que la casse corresponde, nous obtenons une correspondance :

SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('sing', @str) AS Result;

Résultat :

+--------+
| Result |
+--------+
|      7 |
+--------+

Exemple 6 – Arguments NULL

Si l'un des arguments est NULL , NUL est renvoyé :

SELECT 
  LOCATE(NULL, 'Increasingly') a,
  LOCATE('Bat', NULL) b,
  LOCATE('Bat', 'Increasingly', NULL) c;

Résultat :

+------+------+------+
| a    | b    | c    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+