ORACLE SQL - 从列中文本字符串中的两点之间提取文本?

问题描述 投票:0回答:1

我想知道是否有人能够帮助我解决我目前面临的 ORACLE SQL 查询问题,

我有一个 ORACLE SQL 数据库,其中包含数千行和多列,其中一列包含通过内部流程放置在那里的文本格式的 XML 消息。

下面是从包含 XML 字符串的所述列中摘录的单行:

<XXXAlertMessage>
    <XXXAlertCode>XXX</XXXAlertCode>
    <XXXAlert>
        <XXXaaaXXXaaaXXX>
            <XXXXXXaaaXXXaaaXXX>
                    <XXXID>XX-XX-XX-XX-XX-XX-XX-XX</XXXID>
                <XXXType>GXXXXXE</XXXType>
                <MPxNs>
                    <ImportMPxN>7432921709</ImportMPxN>
                </MPxNs>
            </XXXXXXaaaXXXaaaXXX>
        </XXXaaaXXXaaaXXX>
    </XXXAlert>
</XXXAlertMessage>

我正在尝试更新我的 ORACLE SQL 查询以从 XML 列中提取,只是两个 标签之间的值,该值在数据库中每行中的长度不同,因此查找第一个 然后计数/提取右边有一定数量的字符,不幸的是这不起作用:o(

表称为“Transaction”,列称为“XML”,

我目前的基本 ORACLE SQL 查询是:

从事务中选择 XML;

我尝试了多种选择,但目前我不知道解决方案......

我做了一些谷歌搜索,发现了以下主题:

Oracle SQL:提取两个字符之间的文本

但是我已经尝试了一些建议的方法,但我仍然一片空白......

我也尝试过:

带有测试数据(原始文本) 作为 (从事务中选择xml) 选择 regexp_substr(raw_text,'([^]+)',1,1,null,1) 作为 xml 从 测试数据;

查询运行正常,但是它返回一个空列(没有结果):o(

我现在有点不知所措,需要 Stack Overflow 上好心人的帮助、建议或帮助,希望能帮助我完成我的任务 :o)

提前非常感谢任何可以提供帮助的人,

真的非常感谢

问候

冲浪十字军

sql oracle oracle-sqldeveloper
1个回答
0
投票

您可以使用内置的 XMLQuery 函数,而不是尝试将 XML 作为字符串进行操作(这很少有好的结果):

select xmlquery('//MPxNs/ImportMPxN/text()'
  passing xmltype(xml)
  returning content).getstringval() as ImportMPxN
from transaction;
导入MPXN
7432921709

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.