Sql 正则表达式-检索特定的星号分隔值字符串
我需要检索字符串的特定部分,该部分的值由星号分隔 在下面的示例中,我需要检索字符串Client Contact center Seniors2,它位于星号6和7之间 我对正则表达式相当陌生,只使用*[\w]在两个星号之间找到并选择了一个值+* 有没有一种方法可以指定使用正则表达式查看的星号数,或者有没有更好的方法可以检索我要查找的字符串 字符串: 2*J25*Owner11*OwnerGroup2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*CLIENTCONTACTCENTRESENIORSQUEUE29*ClientContactCentreseSeniors 2*K20*0*2*C110*SR_Status_ID2*N18*Referred2*O10* 注意:我将使用REGEXP_LIKEstring,regex在Oracle SQL中使用此正则表达式。*是正则表达式运算符,需要转义,除非在包含字符列表的括号内使用。您可以使用此简化模式来提取 第七个字Sql 正则表达式-检索特定的星号分隔值字符串,sql,regex,oracle,Sql,Regex,Oracle,我需要检索字符串的特定部分,该部分的值由星号分隔 在下面的示例中,我需要检索字符串Client Contact center Seniors2,它位于星号6和7之间 我对正则表达式相当陌生,只使用*[\w]在两个星号之间找到并选择了一个值+* 有没有一种方法可以指定使用正则表达式查看的星号数,或者有没有更好的方法可以检索我要查找的字符串 字符串: 2*J25*Owner11*OwnerGroup2*L231*CLIENTCONTACTCENTRESENIORSQUEUE29*CLIENTCONT
regexp_substr(Audits.audit_log,'[^*]+',1,7)
问题1:
:
问题2:
:
你也可以使用INSTR和SUBSTR。简单快速,但不如REGEXP\u SUBSTR那么简洁
在中等功能的正则表达式语言中,可以使用诸如^[^*]*\*{6}[^*]*\*之类的表示法,其中第一个括号中的表达式匹配6个单位的“零个或多个非星号,后跟一个星号”,第二个匹配“零个或多个非星号”,最后的\*匹配第七个星号。您必须将其调整为Oracle实际支持的正则表达式语言。我没有查看它使用了哪个正则表达式变量。谢谢Jonathan,我在oracle中使用了以下内容,它从您提供的表达式regexp_substrAudits.audit_log,“^[^*]**{6}[^*]*”,1,1,null,2您的右侧sam返回第二个捕获组,我使用regexp_substrAudits返回字符串
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
| REGEXP_SUBSTR(Y,'([^*]+)\*',1,7,NULL,1) |
|-----------------------------------------|
| Client Contact Centre Seniors2 |
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
| REGEXP_SUBSTR(Y,'[^*]+',1,7) |
|--------------------------------|
| Client Contact Centre Seniors2 |
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;