特定字符后的Oracle Substring

时间:2013-04-09 08:48:05

标签: regex oracle substr

我已经发现我需要使用substr / instr或regex但是阅读有关这些的文档,我无法完成它... 我在Oracle 11.2上。

所以这就是我所拥有的。 字符串列表如:

743H5-34L-56
123HD34-7L
12HSS-34R
23Z67-4R-C23

我需要的是第一个' - '之后的数字(长度1或2),直到出现'L'或'R'。

有人有什么建议吗?

2 个答案:

答案 0 :(得分:4)

另一个版本(没有花哨的外观:-):

with v_data as (
  select '743H5-34L-56' val from dual
  union all
  select '123HD34-7L' val from dual
  union all 
  select '12HSS-34R' val from dual
  union all
  select '23Z67-4R-C23' val from dual
)
select 
  val, 
  regexp_replace(val, '^[^-]+-(\d+)[LR].*', '\1') 
from v_data

匹配

  • 字符串“^”
  • 的开头
  • 一个或多个不是' - '“[^ - ] +”
  • 的字符
  • 后跟' - '“ - ”
  • 后跟一个或多个数字(在一组中捕获它们)“(\ d +)”
  • 后跟'L'或'R'“[LR]”
  • 后跟零个或多个任意字符“。*”

答案 1 :(得分:3)

regexp_replace(string, '^.*?-(\d+)[LR].*$', '\1')

fiddle