我要选择出现在字符串中第一个下划线_之后,第二个,第三个或任何数量的下划线_之前的字符串部分。
例如,我有如下字符串:
75618_LORIK1_2_BABA_ODD_GENERIC
19_GENTRIT3_CC_DD_FF_BROWSERTC
75618_BETIM2
输出应为:
LORIK1
GENTRIT3
BETIM2
我似乎找不到某种形式的子串来表示这一部分,我尝试使用:
SELECT SUBSTR(COLNAME, 0, INSTR(COLNAME, '_')-1) FROM DUAL;
但是它似乎只在第一次出现“ _”之前得到。
答案 0 :(得分:3)
这是使用正则表达式执行此操作的一种方法。
with
test_data (str) as (
select '75618_LORIK1_2_BABA_ODD_GENERIC' from dual union all
select '19_GENTRIT3_CC_DD_FF_BROWSERTC' from dual union all
select '75618_BETIM2' from dual union all
select 'NO UNDERLINES HERE' from dual
)
select str, regexp_substr(str, '[^_]*', 1, 3) as second_token
from test_data
;
STR SECOND_TOKEN
------------------------------- -------------------------------
75618_LORIK1_2_BABA_ODD_GENERIC LORIK1
19_GENTRIT3_CC_DD_FF_BROWSERTC GENTRIT3
75618_BETIM2 BETIM2
NO UNDERLINES HERE