0

我在从字符串中提取子字符串时遇到问题。输入值就像

{Resultset: 234, edf, ejj, Resultvalue: hsh, 23,hhs}
{ hashvalue: 233, ehdh, Resultset: 2dd34, edf, ejj}
3rd value:
{hashvalue: 233, ehdh, Resultset: 2dd34, Resultvalue: hsh, 23,hhs}
4th value
{hashvalue: 233, ehdh, Resultset:, Resultvalue: hsh, 23,hhs}
5th value
Null
6th value
{hashvalue: 233, ehdh, Resultvalue: hsh, 23,hhs}

输出应该像

Resultset: 234, edf, ejj
Resultset: 2dd34, edf, ejj
Resultset: 2dd34
Resultset:
Null
Null
Like this.

我试过了,但预期的字符串有时首先出现,有时最后出现。有时我得到比预期更多的字符串。

我认为,需要正则表达式来搜索两个字符,当第一次:出现时不要第二次出现}

4

2 回答 2

0

返回第一个记住的“结果集:后跟任何东西(非贪婪)”组,当该组后面跟着另一个由[逗号,然后是零个或多个空格,然后是一个或多个以冒号结尾的单词字符]组成的组时,或者[右花括号]。

CAVEAT:如果找不到匹配项,则 REGEXP_SUBSTR() 返回 NULL。您可能希望将调用包装在 NVL() 中,然后在值为 NULL 时返回一些内容。

编辑:更新以反映您的新测试数据。

WITH tbl(ID, str) AS (
  SELECT 1, '{Resultset: 234, edf, ejj, Resultvalue: hsh, 23,hhs}' FROM dual UNION ALL
  SELECT 2, '{ hashvalue: 233, ehdh, Resultset: 2dd34, edf, ejj}'    FROM dual  UNION ALL
  SELECT 3, '{hashvalue: 233, ehdh, Resultset: 2dd34, Resultvalue: hsh, 23,hhs}' FROM dual UNION ALL
  SELECT 4, '{hashvalue: 233, ehdh, Resultset:, Resultvalue: hsh, 23,hhs}' FROM dual UNION ALL
  SELECT 5, NULL FROM dual UNION ALL
  SELECT 6, '{hashvalue: 233, ehdh, Resultvalue: hsh, 23,hhs}' FROM dual
)
SELECT ID,
  REGEXP_SUBSTR(str, '(Resultset:.*?)(, *\w+:|})', 1, 1, 'i', 1) resultset
FROM tbl
ORDER BY ID;

         ID RESULTSET                                                         
---------- ------------------------------------------------------------------
         1 Resultset: 234, edf, ejj                                          
         2 Resultset: 2dd34, edf, ejj                                        
         3 Resultset: 2dd34                                                  
         4 Resultset:                                                        
         5                                                                   
         6                                                                   

6 rows selected.
于 2020-02-19T16:09:19.607 回答
0

你可以用REGEXP_SUBSTR这个。查找字符串“Resultset”,后跟几个非逗号,然后是一个逗号,然后是几个非逗号,然后是一个逗号,然后是几个非逗号。

regexp_substr(colname, 'Resultset[^,]*,[^,]*,[^,]*')
于 2020-02-19T13:18:06.113 回答