J'ai besoin d'extraire une sous-chaîne d'une longue chaîne. J'ai essayé la requête suivante mais ne fonctionne pas, ça me retourne null,
Je veux extraire la première valeur 12 entre le i obtenir en conséquence code> code>
3 Réponses :
Vous pouvez obtenir voir le Démo oracle en ligne . p> Le rossi code> en utilisant << / code>, puis correspond à cn> code>. Seule la partie capturée est renvoyée en raison du dernier argument 1 code>. P> p>
Cela ne correspond à rien si l'élément CN code> contient des balises imbriquées telles que
@ Mt0 Les étiquettes Les spectacles ne sont pas imbriqués. Sinon, aucune regex à Oracle pourrait aider et je n'aurais pas partagé cette solution.
Utilisez une subexpression (un groupe correspondant conçu entre parenthèses) pour saisir ce que vous souhaitez:
SELECT REGEXP_SUBSTR('<CC>3</CC><CN>ROSSI</CN><NO>MARIO</NO><IN>VIA DELLE MIMOSE 4</IN>',
'<CN>(.*?)</CN>', 1, 1, NULL, 1)
FROM DUAL;
S'il y a une autre balise cn> code> dans l'entrée, cela ne fonctionnera pas DB <> violon .
OK - alors faites la sous-expression non gourmande. Corrigé la réponse et modifié le violon pour montrer comment la sous-expression gourmande d'origine ne fonctionnerait pas comme si vous le souhaitez s'il y avait plusieurs
n'utilisez pas une expression régulière pour analyser les données XML; Utilisez un analyseur XML approprié:
CC | CN | NO | IN -: | :---- | :---- | :----------------- 3 | ROSSI | MARIO | VIA DELLE MIMOSE 4
Bon +1, je me demande pourquoi les gens stockent / traitent XML en tant que chaîne. Bat le but!
"Utilisez un parseur XML approprié" +1
Juste - au nom de tout ce qui est bon dans le monde! - N'essayez pas d'analyser HTML avec une regex !!!!
Qui suivant la requête? S'il vous plaît nous fournir votre code.