我想得到:
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
答案 0 :(得分:2)
要获得第二个下划线后的所有内容,您不需要正则表达式,但可以使用以下内容:
select substr(FILE_NAME, instr(FILE_NAME, '_', 1, 2) +1 ) from tbl
instr
返回第二次出现的' _'的位置,从第一个字符开始; substr
只是从instr
+ 1
答案 1 :(得分:0)
根据您的要求,您可以继续使用简单的SUBSTR
功能。它更快,它解决了删除字符串LASTNAME_FIRSTNAME
。
select substr('LASTNAME_FIRSTNAME_82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1', 20) data_string
from dual;
输出:
data_string
-----------------
82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1
除非您有其他基础逻辑,否则需要解决? 请澄清,以便我可以相应地编辑答案。