sql - 使用 SQL Developer,我只想在特定字符之后显示字符串中的数字
问题描述
我正在使用 SQL Developer(它必须与 SQL Developer 一起使用),我需要获取一个看起来像 XML 数据的字符串,但它实际上只是一个字符串并将数据显示到一个表中。数据来自一个大表,其中一些用户 ID 中没有数字,一些工作 ID 中没有数字,但类似 XML 的标签仍然存在。同样,它不是只是让 XML 看起来像 XML,因此没有 XML 命令可以工作。
数据:
<UserId>1234567</UserId><JobId>1234567890123</JobId><Date>Wed May 09 13:08:24 EDT 2018</Date>
这是我到目前为止所拥有的:
select company_id, location_id,
regexp_substr(xml_provision_responses,'UserId>([[:digit:]]+<?)') as USER_Id,
regexp_substr(xml_provision_responses,'UserPitId>([[:digit:]]+<?)') as JOB_ID
From Entitymgr.Cr_Response_Matrix
Where CAST(regexp_replace(SUBSTR(xml_provision_responses,-24,4), '[^0-9]','')as varchar(20))='2018'
and company_Id = 9876543 and location_Id = 9876543210987;
第一个 Where 条件只是将数据拉取限制在今年,第二个 Where 条件只是添加到仅关注一个数据点,因此该部分无关紧要。
预期输出:
COMPANY_ID: 9876543
LOCATION_Id:9876543210987
用户 ID:1234567
JOB_ID:1234567890123
=========================================
实际输出:
COMPANY_ID: 9876543
LOCATION_Id:9876543210987
USER_ID:用户ID>1234567<
JOB_ID: JobId>1234567890123<
=========================================
我只想显示 > < 标签之间的字符串的数字部分。如果标签之间没有数字,则将 null 或缺少的单词放入该特定列的表中。
解决方案
您需要使用更多参数regexp_substr
:
select regexp_substr(xml_provision_responses, '(<JobId>)(.*)(</JobId>)', 1, 1, 'i', 2),
regexp_substr(xml_provision_responses, '(<UserId>)(.*)(</UserId>)', 1, 1, 'i', 2)
...
这个想法是将匹配字符串分成3部分:
- 标签开头 (
(<UserId>)
) - 内容 (
(.*)
) - 标签闭包 (
(</UserId>)
)
然后只获取第二个匹配的子表达式(参见2
函数调用中的参数。
推荐阅读
- android - Android Studio:当我开始一个项目时,我分叉但得到一个错误“没有找到'app'的变体。”
- android - 如何在android中实现Realm DB上的Inner Join
- amazon-web-services - AWS Cloudwatch 上的自定义指标延迟
- node.js - nodejs异步等待一个变量中的所有数据
- python - Python:文件下载权限错误 [Errno 13]
- html - 如何仅使用 CSS 将复选框与标签对齐
- c++ - 通过 Clang/LLVM 使用特定寄存器强制全局变量
- c# - 如何进入 Shell 页面并离开菜单按钮?
- javascript - 当 JSON 不支持 NaN 时,为什么 MongoDB 允许 NaN 值?
- c# - 删除 Linq 中的任何内容