微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

REGEXP_SUBSTR - 如何在“ ”之间返回值?

如何解决REGEXP_SUBSTR - 如何在“ ”之间返回值?

我需要从字符串下方的 ' ' 返回值(例如,对于 psOrderByClause,我需要值 xxx_seqno)。此外,我还需要为某些变量返回 TRUE/FALSE 值 - 没有单引号(例如,pbUsedisplayName 我需要 TRUE)。

我不必在一个查询中,每个变量都应该有单独的查询(例如,psOrderByClausepsSeparator 等)

prcCSVGenerator(pnRunKey => pnRunKey,pnConfigKey => pnConfigKey,psOrderByClause => 'xxx_seqno',psSeparator => '|',pbUsedisplayName => TRUE,pbUseWindowSEOL => TRUE);

例如从上面的字符串我需要在一个查询中返回 xxx_seqnoTRUE一个

并不总是像上面那样的“空格”,有时看起来像“psOrderByClause=> 'xxx_seqno'”或“psOrderByClause=>'xxx_seqno'” >

我感觉 Regex 不太好,我只有这样的东西,但这会返回 psSeparator 之后的所有字符

REGEXP_SUBSTR (text,'(psSeparator)(.*)',1,'i',2) 正则表达式

有人可以帮我吗?

谢谢

解决方法

您可以使用:

SELECT REGEXP_SUBSTR(
         value,q'[psOrderByClause\s*=>\s*('(''|[^'])*'|.*?)\s*(,|\))]',1,'i',1
       ) AS psOrderByClause,REGEXP_SUBSTR(
         value,q'[psSeparator\s*=>\s*('(''|[^'])*'|.*?)\s*(,1
       ) AS psSeparator,q'[pbUseDisplayName\s*=>\s*('(''|[^'])*'|.*?)\s*(,1
       ) AS pbUseDisplayName,q'[pbUseWindowsEOL\s*=>\s*('(''|[^'])*'|.*?)\s*(,1
       ) AS pbUseWindowsEOL
FROM   table_name

对于样本数据:

CREATE TABLE table_name ( value ) AS
SELECT 'prcCSVGenerator(pnRunKey => pnRunKey,pnConfigKey => pnConfigKey,psOrderByClause => ''xxx_seqno'',psSeparator => ''|'',pbUseDisplayName => TRUE,pbUseWindowsEOL => TRUE);' FROM DUAL

输出:

PSORDERBYCLAUSE PSSEPARATOR PBUSEDISPLAYNAME PBUSEWINDOWSEOL
'xxx_seqno' '|' 真的 真的

如果您不想要周围的引号,则可以根据需要修剪它们。

dbfiddle here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?