繁体   English   中英

Oracle SQL:Regexp_substr

[英]Oracle SQL : Regexp_substr

我在列中有以下样本值

Abc-123-xyz
Def-456-uvw
Ghi-879-rst-123
Jkl-abc

预期的输出是将第三个元素除以“-”,如果没有第三个元素,则将检索最后一个元素。

请参阅下面的预期输出:

Xyz
Uvw
Rst
Abc

谢谢您的帮助。

SELECT initcap(nvl(regexp_substr(word, '[^-]+', 1,3),regexp_substr(word, '[^-]+', 1,2)))  FROM your_table;

另一种方法:

SQL> with t1(col) as(
  2    select 'Abc-123-xyz'     from dual union all
  3    select 'Def-456-uvw'     from dual union all
  4    select 'Ghi-879-rst-123' from dual union all
  5    select 'Jkl-Abc'         from dual
  6  )
  7  select regexp_substr( col
  8                      , '[^-]+'
  9                      , 1
 10                      , case
 11                           when regexp_count(col, '[^-]+') >= 3
 12                           then 3
 13                           else regexp_count(col, '[^-]+')
 14                        end
 15                      ) as res
 16    from t1
 17  ;

结果:

RES
---------------
xyz
uvw
rst
Abc
regexp_substr(column, '(.*?-){0,2}([^-]+)', 1, 1, '', 2)

您也可以不使用RegEx来执行此操作:

with t1 as(
  select 'Abc-123-xyz' as MyText     from dual union all
  select 'Def-456-uvw'     from dual union all
  select 'Ghi-879-rst-123' from dual union all
  select 'Jkl-Abc'         from dual
)
SELECT 
  SUBSTR(t1.mytext, LENGTH(t1.mytext) - INSTR(REVERSE(t1.mytext), '-') + 2) 
FROM t1
;

暂无
暂无

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

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