Comment dois-je analyser une chaîne de caractères dans Oracle?
Comment puis-je analyser la valeur de la "demande" dans la chaîne suivante dans Oracle?
<!-- accountId="123" activity="add" request="add user" -->
La taille et la position de la demande est aléatoire.
Le fait que vous avez joint à la chaîne dans des crochets dans la forme d'un commentaire XML m'amène à me demander si c'est le XML, vous travaillez avec? Les réponses ci-dessous sont valables pour la plaine de cordes et de travail pour le XML, mais il peut être plus robuste à l'utilisation d'un XMLTYPE si c'est le XML.
OriginalL'auteur ed1t | 2011-06-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser des expressions régulières pour trouver ceci:
.*\s+request
de sorte qu'il ne correspond pas à des choses commesubrequest="foo"
.OriginalL'auteur Craig
Utilisation
INSTR(givenstring, stringchartosearch,start_position)
pour trouver la position de la demande de=" " et de trouver la position de la clôture de l' '"'.Ensuite utiliser
substr(string, starting_position, length)
.OriginalL'auteur Oleg Pavliv
Vous pouvez utiliser une combinaison de
instr
etsubstr
CET EXEMPLE EST QU'À TITRE D'EXEMPLE. NE PAS UTILISER DANS UN CODE DE PRODUCTION COMME IL N'EST PAS TRÈS PROPRE.
OriginalL'auteur cwallenpoole
Ci-dessous est mon testés variations de cwallenpoole et Craig. Pour les regexp - à noter que si "request=" n'existe pas, le résultat sera l'ensemble de la chaîne. user349433 a été en partie là aussi, un espace avant "request=" dans la recherche fonctionne tout aussi bien:
OriginalL'auteur Joel Slowik
Veuillez noter que le signe égal "=" ne doit pas nécessairement venir immédiatement après la demande variable dans le travail. En tant que tel, il n'est pas tout à fait correct pour de la recherche pour "request=". Vous devez créer une base de machine à états finis à l'aide de l'INSTRUMENT d'abord trouver "demande", puis trouver "=", ...
OriginalL'auteur Perrault Jean-Paul