2016-12-28 51 views
-2

的部分我想獲得:REGEXP_SUBSTR字符串

82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1

從下面的表達式

LASTNAME_FIRSTNAME_82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1

是否有人知道我能得到這個使用REGEXP_SUBSTR?

EDIT

基本上我有具有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

給出的位置開始獲得一切,你需要實現什麼邏輯?您是否需要刪除「LASTNAME_FIRSTNAME_」部分?前兩個「單詞」用下劃線作爲分隔符?一切都到第二個下劃線,......?你到目前爲止嘗試過什麼? – Aleksej

回答

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 

除非你有其他潛在的邏輯,你需要解決? 請澄清,以便我可以相應地編輯答案。

+0

對不起,我沒有更詳細地解釋這一點。基本上我有一個領域。 –

2

得到一切的第二個下劃線之後,你不需要正則表達式,但可以使用類似以下內容:

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

instr回報的「_」第二次出現的位置,通過啓動第一個字符; substr只是從instr + 1

相關問題