SQL LOCATE()

En SQL, la fonction LOCATE() permet de chercher la position d’une chaîne de caractère dans un enregistrement. La fonction retourne zéro si la chaîne de caractère n’a pas été trouvée.

Cette fonction peut se révéler très utile lorsqu’elle est couplée à la fonction SUBSTR() ( alias SUBSTRING() ) pour pouvoir remplacer des caractères dans une chaîne.

A noter : pour les utilisateurs de SQL Server la fonction s’appelle CHARINDEX() et fonctionne de la même façon.

A propos : la fonction LOCATE() s’assimile à la fonction PHP strpos().

Syntaxe

La fonction peut s’utiliser dans une requête SQL telle que celle-ci :

SELECT LOCATE( chaine_recherche, chaine_source );

Dans cette requête, la fonction va chercher le contenu de “chaine_recherche” dans “chaine_source”. Si la chaîne existe et est présente, alors la fonction retournera la position de la première occurrence.

Attention : le premier caractère est à la position 1 et si la chaîne n’est pas trouvé, la fonction retournera 0.

Il est possible de chercher une chaîne de caractère en commençant à chercher à partir d’une position. La requête SQL suivante permet de chercher la chaîne “test” dans la colonne “nom_colonne” en commençant à chercher à partir de la position 4.

SELECT LOCATE( 'test', nom_colonne, 4 );

Ce 3ème paramètre est optionnel et peut être utilisé s’il faut ignorer une première partie.

Exemple

Imaginons une table qui contient les différentes unités liées aux mètres (kilomètre, millimètre, centimètre …).

Table “metre” :

idunitepuissancedate_ajout
1kilomètre10002013-07-16
2millimètre0.0012013-08-06
3mètre12013-09-02
4centimètre0.012013-11-27
5mm0.0012013-11-29

Pour le bien de ce tutoriel, nous allons essayer de récupérer la position du mot “mètre” dans la colonne “unite”. Pour cela il est possible d’exécuter la requête suivante :

SELECT `id`, `unite`, LOCATE(`unite`) AS locate_unite, `puissance`
FROM `metre`

Résultats :

idunitelocate_unitepuissance
1kilomètre51000
2millimètre60.001
3mètre11
4centimètre60.01
5mm00.001

Les résultats montre qu’il est possible d’obtenir la position du mot recherché et que la fonction retourne bien zéro si la chaîne n’a pas été trouvée.

Partager