Oracle SQL 正则表达式 (regexp_substr)
Posted
技术标签:
【中文标题】Oracle SQL 正则表达式 (regexp_substr)【英文标题】:Oracle SQL Regular Expression (regexp_substr) 【发布时间】:2018-08-23 17:58:43 【问题描述】:我一直在研究并尝试在 Oracle SQL 中使用正则表达式来选择字符串中的子字符串。我只想选择“UT”、“T1”或“T2”值,我想选择字符串中最后出现的任何一个值。
“INPUT”列显示我的示例数据,“TARGET”列显示我想要的值,“OUTPUT”显示我使用当前正则表达式语句得到的值
(SELECT regexp_substr(INPUT, '_(UT|T[A-Z]*[1-2]*)', 1, 1, '', 1) FROM table)
(请注意,我已尝试在上面的语句中将起始索引位置更改为 -1,但不支持)
谢谢
输入
XXs5_ABC_94_T2_99 ABs9_AXY_09_UT LPs3_SHT9_01_T1_90 OOs7_POT_0_UT_T1_89 IPs0_XYS_18_UT_T1_19 VGs5_POT7_01_T1_15_T2_45目标
T2 UT T1 T1 T1 T2输出
T2 UT T1 UT UT T1【问题讨论】:
【参考方案1】:您的查询几乎是正确的。只需在模式的开头添加.*
,以强制在输入字符串中尽可能找到交替的匹配项(同时仍然允许匹配整个模式)。
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
【讨论】:
以上是关于Oracle SQL 正则表达式 (regexp_substr)的主要内容,如果未能解决你的问题,请参考以下文章
Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
Oracle SQL 正则表达式 RegExp_SubStr End Of Line (chr(10) 在搜索文本中返回 null