Diviser une chaîne par position de délimiteur à l'aide d'Oracle SQL
Une tâche courante lorsque l'on travaille avec des chaînes consiste à les diviser en segments plus petits en fonction d'un délimiteur spécifique. Cependant, lorsque la position du délimiteur varie au sein d'une chaîne, le fractionnement devient plus complexe.
Énoncé du problème
Supposons que vous ayez une chaîne comme "F/P/O" et souhaitez le diviser par l'occurrence la plus éloignée du délimiteur "/". Le résultat souhaité est de séparer la chaîne en deux parties : "F/P" et "O".
Tentative initiale
L'instruction SQL suivante tente de diviser la chaîne chaîne à l'aide des fonctions SUBSTR et INSTR :
SELECT Substr('F/P/O', 1, Instr('F/P/O', '/') - 1) part1, Substr('F/P/O', Instr('F/P/O', '/') + 1) part2 FROM dual
Cependant, cette requête produit un résultat inattendu, divisant la chaîne en "F" et "/P/O."
Résolution
Le problème réside dans l'utilisation de la fonction INSTR. Par défaut, INSTR recherche la première occurrence du délimiteur, pas la plus éloignée. Pour trouver le délimiteur le plus éloigné, la fonction INSTR doit être modifiée pour rechercher à partir de la fin de la chaîne :
SELECT SUBSTR(str, 1, Instr(str, '/', -1, 1) -1) part1, SUBSTR(str, Instr(str, '/', -1, 1) +1) part2 FROM DATA
En démarrant la recherche par la fin (indiquée par la position négative start_position -1), la fonction INSTR localise la dernière occurrence du délimiteur et divise la chaîne en conséquence en « F/P » et « O ». Cette approche garantit que même lorsqu'il y a plusieurs délimiteurs dans la chaîne, la division se produit à la position la plus éloignée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!