2

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

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

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

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

有人有什么建议吗?

4

2 回答 2

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

小提琴

于 2013-04-09T09:02:27.833 回答
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]”
  • 后跟零个或多个任意字符“.*”
于 2013-04-09T10:11:51.993 回答