我需要检索字符串的特定部分,其中的值由星号
分隔在下面的示例中,我需要检索位于6到7星号之间的字符串 Client Contact Center Seniors2 。
我对正则表达式相当新,并且设法找到使用* [\ w] + *
选择2个星号之间的值有没有办法指定使用正则表达式查看哪个星号,或者是否有更好的方法来检索我所追求的字符串?
字符串:
2 * J25 *所有者11 *所有者组2 * L231 *客户联系中心客户中心29 *客户联络中心老年人2 * K20 * 0 * 2 * C110 * SR_STAT_ID2 * N18 *参考2 * O10 *
注意:我将使用REGEXP_LIKE(string, regex)
在Oracle SQL中使用此正则表达式。
答案 0 :(得分:0)
*
是一个正则表达式运算符,需要进行转义,除非在包含字符列表的括号内使用。您可以使用此简化模式来提取
第七个字。
regexp_substr(Audits.audit_log,'[^*]+',1,7)
查询1 :
with x(y) as (
select '2*J25*Owner11*Owner Group2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*Client Contact Centre Seniors2*K20*0*2*C110*SR_STAT_ID2*N18*Referred2*O10*'
from dual
)
select regexp_substr(y,'([^*]+)\*',1,7,null,1)
from x
<强> Results 强>:
| REGEXP_SUBSTR(Y,'([^*]+)\*',1,7,NULL,1) |
|-----------------------------------------|
| Client Contact Centre Seniors2 |
查询2 :
with x(y) as (
select '2*J25*Owner11*Owner Group2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*Client Contact Centre Seniors2*K20*0*2*C110*SR_STAT_ID2*N18*Referred2*O10*'
from dual
)
select regexp_substr(y,'[^*]+',1,7)
from x
<强> Results 强>:
| REGEXP_SUBSTR(Y,'[^*]+',1,7) |
|--------------------------------|
| Client Contact Centre Seniors2 |
答案 1 :(得分:0)
您也可以使用INSTR
和SUBSTR
。简单快速,但不像REGEXP_SUBSTR
那样简洁。
with t as (
select '2*J25*Owner11*Owner Group2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*Client Contact Centre Seniors2*K20*0*2*C110*SR_STAT_ID2*N18*Referred2*O10*' testvalue
from dual
)
select substr(testvalue, instr(testvalue, '*', 1, 6)+1, instr(testvalue, '*', 1, 7) - instr(testvalue, '*', 1, 6) - 1)
from t;