我一直在研究并尝试在Oracle SQL中使用正则表达式在字符串中选择子字符串。我只想选择“ UT”,“ T1”或“ T2”值,并且我要选择这些值中出现在字符串最后的那个。
“ INPUT”列显示我的示例数据,“ TARGET”列显示我想要的值,“ OUTPUT”显示我在当前正则表达式语句中获取的值
(SELECT regexp_substr(INPUT, '_(UT|T[A-Z]*[1-2]*)', 1, 1, '', 1) FROM table)
(请注意,我在上面的语句中尝试将起始索引位置更改为-1,但不支持)
谢谢
输入
目标
输出
答案 0 :(得分:2)
您的查询几乎是正确的。只需在模式的开头添加.*
,以强制在输入字符串中尽可能找到替代的匹配项(同时仍允许整个模式的匹配项)。
with
table_ (input) as (
select 'XXs5_ABC_94_T2_99' from dual union all
select 'ABs9_AXY_09_UT' from dual union all
select 'LPs3_SHT9_01_T1_90' from dual union all
select 'OOs7_POT_0_UT_T1_89' from dual union all
select 'IPs0_XYS_18_UT_T1_19' from dual union all
select 'VGs5_POT7_01_T1_15_T2_45' from dual
)
select input,
regexp_substr(input, '.*_(UT|T[A-Z]*[1-2]*)', 1, 1, '', 1) as req_substr
from table_
;
INPUT REQ_SUBSTR
------------------------ ------------------------
XXs5_ABC_94_T2_99 T2
ABs9_AXY_09_UT UT
LPs3_SHT9_01_T1_90 T1
OOs7_POT_0_UT_T1_89 T1
IPs0_XYS_18_UT_T1_19 T1
VGs5_POT7_01_T1_15_T2_45 T2