MariaDB a un INSTR()
fonction et aussi un LOCATE()
une fonction. Les deux fonctions semblent faire exactement la même chose :renvoyer la position d'une sous-chaîne dans une chaîne.
Cependant, il y a une différence.
Les différences
Nous pouvons voir la différence entre ces deux fonctions en regardant leur syntaxe, ainsi que quelques exemples.
Syntaxe
La syntaxe de INSTR()
:
INSTR(str,substr)
Les deux syntaxes acceptées pour LOCATE()
:
LOCATE(substr,str)
LOCATE(substr,str,pos)
Où str
est la chaîne, substr
est la sous-chaîne à rechercher, et pos
est la position pour commencer la recherche.
La différence entre les deux fonctions peut être résumée comme suit :
- Le
LOCATE()
la fonction accepte les deux mêmes arguments queINSTR()
accepte, mais dans l'ordre inverse.
- Le
LOCATE()
La fonction accepte un troisième argument facultatif pour spécifier la position de départ de la recherche. LeINSTR()
la fonction n'accepte pas un tel argument.
Donc LOCATE()
fournit des fonctionnalités supplémentaires que INSTR()
ne fournit pas.
Exemple 1 - La première différence
Voici un exemple qui montre l'ordre inverse dans lequel les deux fonctions acceptent leurs arguments :
SELECT
INSTR('Disconnect', 'con'),
LOCATE('con', 'Disconnect');
Résultat :
+----------------------------+-----------------------------+ | INSTR('Disconnect', 'con') | LOCATE('con', 'Disconnect') | +----------------------------+-----------------------------+ | 4 | 4 | +----------------------------+-----------------------------+
Exemple 2 - La deuxième différence
Voici un exemple qui montre la fonctionnalité supplémentaire que LOCATE()
fournit sur INSTR()
:
SELECT
INSTR('My cat is a good cat', 'cat') AS "INSTR()",
LOCATE('cat', 'My cat is a good cat') AS "LOCATE()",
LOCATE('cat', 'My cat is a good cat', 10) AS "LOCATE() with 3rd Argument";
Résultat :
+---------+----------+----------------------------+ | INSTR() | LOCATE() | LOCATE() with 3rd Argument | +---------+----------+----------------------------+ | 4 | 4 | 18 | +---------+----------+----------------------------+
Cet exemple met en évidence le fait que le LOCATE()
La fonction nous fournit un troisième argument optionnel. Cet argument nous permet de spécifier une position de départ pour la recherche, ce qui signifie que nous ne sommes pas limités à la première occurrence dans toute la chaîne.