LOCATE_IN_STRING
Recherche d'une chaine de caractères dans une autre chaine de caractères
Fonction :
La fonction scalaire LOCATE_IN_STRING permet de rechercher une chaine de caractères dans une autre.
Cela permet, par exemple, de savoir si un champ donné de la table requêtée contient la chaine de caractères à rechercher.
LOCATE_IN_STRING est une fonction scalaire SQL qui retourne la position de début de la première occurrence de la chaine rechercher trouvée dans la chaine à analyser.
Si la chaine recherchée n’est pas présente dans la chaine à analyser, la fonction retourne 0.
Syntaxe :
L’instruction LOCATE_IN_STRING dispose de 4 paramètres.
Les 2 premiers sont obligatoires et sont :
- La chaine à analyser ou le champ contenant la chaine à analyser.
- La chaine à rechercher ou le champ contenant la chaine à rechercher.
- La position de début de la recherche dans la chaine à analyser. (Valeur par défaut = 1)
- L’occurrence à partir de laquelle la recherche doit commencer. (Valeur par défaut = 1)
Si on sait que la chaine à analyser contient plusieurs fois la chaine à rechercher mais que l’on ne connait pas la position, on peut utiliser ce paramètre pour indiquer que notre recherche porte sur une autre occurrence que la première trouvée. (Voir les exemples ci-dessous).
Exemples :
Exemple 1 : Tester si une chaine de caractère contient une chaine.
SELECT LOCATE_IN_STRING(‘Ceci est la chaine à analyser qui contient la chaine à trouver’, ‘chaine à trouver’)
FROM SYSIBM.SYSDUMMY1;
Retourne 47 ce qui correspond à la position de début de ‘chaine à trouver’ dans la chaine ‘Ceci est la chaine à analyser qui contient la chaine à trouver’.
Exemple 2 : Sélection des enregistrements dont un champ contient une chaine de caractères donnée.
SELECT OBJNAME FROM TABLE(QSYS2.OBJECT_STATISTICS(‘*ALL’,‘LIB’))
WHERE LOCATE_IN_STRING(UPPER(OBJNAME), ‘QSYS’) > 0;
Retourne toutes les bibliothèques dont le nom contient ‘QSYS’.
Exemple 3 : Recherche de la position d'une occurrence d'une chaine dans une autre.
SELECT LOCATE_IN_STRING(‘Ceci est la chaine à analyser qui contient la chaine à trouver’, ‘chaine’, 1, 1)
FROM SYSIBM.SYSDUMMY1;
Retourne 13 ce qui correspond à la position de début de la première occurrence du mot ‘chaine’ dans la chaine ‘Ceci est la chaine à analyser qui contient la chaine à trouver’.
SELECT LOCATE_IN_STRING(‘Ceci est la chaine à analyser qui contient la chaine à trouver’, ‘chaine’, 1, 2)
FROM SYSIBM.SYSDUMMY1;
Retourne 47 ce qui correspond à la position de début de la seconde occurrence du mot ‘chaine’ dans la chaine ‘Ceci est la chaine à analyser qui contient la chaine à trouver’.
SELECT LOCATE_IN_STRING(‘Ceci est la chaine à analyser qui contient la chaine à trouver’, ‘chaine’, 1, 3)
FROM SYSIBM.SYSDUMMY1;
Retourne 0 car la chaine à analyser ne contient que 2 occurrences du mot ‘chaine’.