-2

我想得到:

82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1

从以下表达式

LASTNAME_FIRSTNAME_82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1

有人知道我如何使用 regexp_substr 得到这个吗?

编辑

基本上我有一个字段,其中有 7 个集合,每个集合由 _ 分隔。我给出的字符串只是一个例子。我想在第二个 _ 之后检索所有内容。没有固定的字符长度,所以我不能使用 substr 函数。因此我使用了 regexp_substr。我能够通过使用简化版本逃脱

Select FILE_NAME, (  (REGEXP_SUBSTR(FILE_NAME,'[^_]+_',1,3)) || 
                      (REGEXP_SUBSTR(FILE_NAME,'[^_]+_',1,4)) || 
                      (REGEXP_SUBSTR(FILE_NAME,'[^_]+_',1,5)) ||
                      (REGEXP_SUBSTR(FILE_NAME,'[^_]+_',1,6)) || 
                      (REGEXP_SUBSTR(FILE_NAME,'[^_]+',1,7))  ) as RegExp
             from tbl

这是来自 FILE_NAME 字段的更多数据

LAST_FIRST_82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1
SMITH_JOHN_82961_0130BPQX9QZN9G4P5RDTPA9HR4R_MR_1_1of1
LASTNAME_FIRSTNAME_99999_01V0MU4XUQK0Y24Y9RYTFA7W1CM_MR_3_1of1
4

2 回答 2

2

要获取第二个下划线之后的所有内容,您不需要正则表达式,但可以使用以下内容:

 select substr(FILE_NAME, instr(FILE_NAME, '_', 1, 2) +1 ) from tbl    

instr返回“_”第二次出现的位置,从第一个字符开始;只需从+ 1给出的substr位置开始获取所有内容instr

于 2016-12-28T14:57:25.420 回答
0

根据您的要求,您可以继续使用简单SUBSTR功能。它更快,并且解决了删除 String 的简单需求LASTNAME_FIRSTNAME

select  substr('LASTNAME_FIRSTNAME_82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1', 20) data_string
from    dual;

输出:

data_string
-----------------
82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1

除非您有另一个需要解决的基本逻辑?请澄清,以便我可以相应地编辑答案。

于 2016-12-28T14:57:12.300 回答