【问题标题】:Oracle SQL Regular Expression (regexp_substr)Oracle SQL 正则表达式 (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

【问题讨论】:

    标签: sql regex oracle


    【解决方案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  
    

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2019-06-10
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多