oracle 我需要从一列中获取子字符串,哪个函数最适合?

w6mmgewl  于 2023-03-17  发布在  Oracle
关注(0)|答案(3)|浏览(151)
Entity=10||WorkdayReferenceID=9000100102||HCMCostCenterMgr=svigeant@broadinstitute.org||FRP=100007071||BGType=Organizational||SalAllow=Y||ConcurAtlasAllow=Y||EBAllow=Y||

有没有人能帮忙我需要从中提取**FRP值。
例如-输出应为“
100007071**”

RTRIM(NVL(SUBSTR(TL.DESCRIPTION,(INSTR(TL.DESCRIPTION, '=' ,1,4)+1)
                               ,(INSTR(TL.DESCRIPTION, '||',1,4)-1)),0), '|')

我试过这个,但没有得到结果。

iqih9akk

iqih9akk1#

一个选项使用REGEXP_REPLACE(),例如

SELECT REGEXP_REPLACE(col,'(.*FRP=)(\d+)(.*)','\2') AS result       
  FROM t

RESULT
---------
100007071

它提取刚好在FRP=之后开始的片段,并且只要数字(\d+)存在就一直进行
Demo

eqqqjvef

eqqqjvef2#

这里有一个选择:
样本数据:

SQL> with test (col) as
  2    (select 'Entity=10||WorkdayReferenceID=9000100102||HCMCostCenterMgr=svigeant@broadinstitute.org||FRP=100007071||BGType=Organizational||SalAllow=Y||ConcurAtlasAllow=Y||EBAllow=Y||' from dual)

质询:

3  select ltrim(regexp_substr(col, 'FRP=\d+'), 'FRP=') result
  4  from test
  5  /

RESULT
---------
100007071

SQL>
ikfrs5lh

ikfrs5lh3#

如果你没有或者不想使用regexp(性能代价高昂),可以使用SubStr()和InStr()函数。

WITH
    tbl AS
      (  Select 'Entity=10||WorkdayReferenceID=9000100102||HCMCostCenterMgr=svigeant@broadinstitute.org||FRP=100007071||BGType=Organizational||SalAllow=Y||ConcurAtlasAllow=Y||EBAllow=Y||' "MY_TEXT" From Dual  )

Select  SubStr( SubStr(MY_TEXT, InStr(MY_TEXT, '||FRP=') + 6), 
                1,
                InStr(SubStr(MY_TEXT, InStr(MY_TEXT, '||FRP=') + 6), '||', 1, 1) - 1
              ) "FRP"
From tbl

FRP      
---------
100007071

相关问题