繁体   English   中英

Oracle SQL正则表达式(regexp_substr)

[英]Oracle SQL Regular Expression (regexp_substr)

我一直在研究并尝试在Oracle SQL中使用正则表达式在字符串中选择子字符串。 我只想选择“ UT”,“ T1”或“ T2”值,并且我想选择这些值中出现在字符串最后的那个值。

“ INPUT”列显示我的示例数据,“ TARGET”列显示我想要的值,“ OUTPUT”显示我在当前正则表达式语句中获取的值

(SELECT regexp_substr(INPUT, '_(UT|T[AZ]*[1-2]*)', 1, 1, '', 1) FROM table)

(请注意,我在上面的语句中尝试将起始索引位置更改为-1,但不支持)

谢谢

INPUT

  • 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

OUTPUT

  • T2
  • UT
  • T1
  • UT
  • UT
  • T1

您的查询几乎是正确的。 只需在模式的开头添加.* ,以强制在输入字符串中尽可能找到替代的匹配项(同时仍允许整个模式的匹配项)。

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  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM