暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用regexp_substr从长字符串中提取多个主机名

ASKTOM 2021-04-07
1131

问题描述

嗨,汤姆,

我正在尝试从一个长字符串中提取多个主机名 (实际上,稍后我将对DBLink-host列使用此方法)。但是,我的查询只能提取第一个主机名。我确实尝试将 {1,0} 放在匹配模式之后 ((主机 | 主机名)[[: 空格:]]*(\ =)[[: 空格:]]*(\ w | \-|\_)*(\.\ w )* |(\ w | \-|\_)*(\.\ w ) |((\ w | \-|\_) $)){1,} ',但仍然无法提取其余的出现匹配。你能帮我吗?谢谢。

= = 查询输出 ===

主机名
--------------------
LXC01-VIP.TEST.COM


预期产出
--------------------
LXC01-VIP.TEST.COM LXC02-VIP.TEST.COM

-我当前的查询-

SELECT 
       REGEXP_REPLACE (
          REGEXP_REPLACE (
             REGEXP_REPLACE (
                REGEXP_SUBSTR (
                   UPPER (
                      '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = lxc01-vip.test.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = lxc02-vip.test.com)(PORT = 1521)) (LOAD_BALANCE = ON) (FAILOVER = ON) ) (CONNECT_DATA = (SERVICE_NAME = Test) ) )'),
                   '((HOST|主机名)[[:space:]]*(\=)[[:space:]]*(\w+|\-|\_)*(\.\w+)*|(\w+|\-|\_)*(\.\w+)+|((\w+|\-|\_)+$))'),
                ' ',
                ''),
             'HOST=',
             ''),
          '主机名=',
          '')
          主机名
  FROM DUAL;


问候,
安德斯

专家解答

检查此链接

https://asktom.oracle.com/pls/apex/asktom.search?tag=convert-comma-separated-values-in-a-column-into-rows-and-join-the-result-set-with-another-table

对于我们如何使用regexp基于逗号 (即CSV到行) 拆分字符串。

它可能看起来是相关的,但概念是-即,我们找到一个匹配 (逗号或在你的情况下是主机),然后迭代 “n” 次使用connect-从-dual拿起第一,第二,等匹配元素。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论