Sql 使用RegExp拆分字符串

Sql 使用RegExp拆分字符串,sql,oracle,plsql,Sql,Oracle,Plsql,以下字符串中包含一些变量: sText := '%CUSTOMER_LASTNAME%%CUSTOMER_PRENAME% - LANG: %LANGUAGE%' 我制作了一个自定义的SPLIT_字符串函数,希望得到字符串中的每个变量: sStr := SPLIT_STRING(sText,'%'); 我现在得到的是: 无效的 客户姓氏 无效的 客户名称, “-Lang”: 语言 无效的 我需要的是: 客户姓氏 客户名称 语言 我可以使用RegExp执行拆分字符串吗?或者如何执行 短暂性脑缺

以下字符串中包含一些变量:

sText := '%CUSTOMER_LASTNAME%%CUSTOMER_PRENAME% - LANG: %LANGUAGE%'
我制作了一个自定义的SPLIT_字符串函数,希望得到字符串中的每个变量:

sStr := SPLIT_STRING(sText,'%');
我现在得到的是:

无效的 客户姓氏 无效的 客户名称, “-Lang”: 语言 无效的 我需要的是:

客户姓氏 客户名称 语言 我可以使用RegExp执行拆分字符串吗?或者如何执行

短暂性脑缺血发作 frgtv10

我可以使用RegExp执行拆分字符串吗

是的,你可以。下面是一个如何做到这一点的例子

    SQL> with t1(col) as(
      2    select '%CUSTOMER_LASTNAME%%CUSTOMER_PRENAME%- LANG: %LANGUAGE%' from dual
      3  )
      4  , ocrs as(
      5     select level as ocr
      6       from ( select max(regexp_count(col, '%[^%]+%')) mxo
      7                from t1
      8             ) s
      9     connect by level <= s.mxo
     10  )
     11  select ltrim(rtrim(regexp_substr(col, '%[^%]+%', 1, o.ocr), '%'), '%') as res
     12    from t1
     13    cross join ocrs o
     14  ;

Result:

    RES
    --------------------
    CUSTOMER_LASTNAME
    CUSTOMER_PRENAME
    LANGUAGE

哇,这对我来说有点奇怪。可以把它放在函数中吗?我真的需要从两个部分中进行选择吗?哇。。我需要特别为regexp获取一个证书:@frgtv10 with子句只是用来表示您提供的数据样本——简单地说,是一种表替换。这是可行的,但如何将其放入函数中以使用它可能像SPLIT_STRING函数一样?@ajmalmhd04 lol,也许可以开始提供证书。在那之前,这里有一些东西可以让你走。