2016-12-28 5 views
-2

Ich mag würde bekommen:REGEXP_SUBSTR für Teil der Zeichenkette

82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1

aus dem folgenden Ausdruck

LASTNAME_FIRSTNAME_82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1

Weiß jemand, wie ich dies mit REGEXP_SUBSTR bekommen kann?

EDIT

Grundsätzlich habe ich ein Feld, das 7-Sets hat jede von _ getrennt. Die angegebene Zeichenfolge ist nur ein Beispiel. Ich wollte alles nach dem zweiten abrufen. Da es keine feste Zeichenlänge gibt, kann ich keine substr-Funktion verwenden. Daher habe ich regexp_substr. Ich konnte wegzukommen durch eine vereinfachte Version

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 

Hier einige weitere Daten aus dem FILE_NAME Feld ist

LAST_FIRST_82961_01B04WZXQQSUGJ4YMRRT2A7TRHK_MR_2_1of1 
SMITH_JOHN_82961_0130BPQX9QZN9G4P5RDTPA9HR4R_MR_1_1of1 
LASTNAME_FIRSTNAME_99999_01V0MU4XUQK0Y24Y9RYTFA7W1CM_MR_3_1of1 
+0

Welche Logik müssen Sie realisieren? Müssen Sie den Teil 'LASTNAME_FIRSTNAME_' entfernen? Die ersten beiden "Wörter" mit dem Unterstrich als Trennzeichen? alles bis zum zweiten Unterstrich, ...? Und was hast du bisher versucht? – Aleksej

Antwort

0

Von Ihrer Anforderung, können Sie einfach weitermachen und die einfache SUBSTR-Funktion verwenden. Es ist schneller und adressiert die einfache Notwendigkeit, den String LASTNAME_FIRSTNAME zu entfernen.

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

Ausgang:

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

Es sei denn, Sie haben eine andere zugrunde liegende Logik müssen Sie ansprechen? Bitte klären, damit ich die Antwort entsprechend bearbeiten kann.

+0

Es tut mir leid, dass ich das nicht näher erläutert habe. Grundsätzlich habe ich ein Feld. –

2

Um alles nach dem zweiten Unterstrich zu erhalten, müssen Sie reguläre Ausdrücke nicht benötigen, können aber so etwas wie die folgenden verwenden:

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

Die instr kehrt die Position des zweiten Auftreten von ‚_‘, durch das Starten das erste Zeichen; Die substr bekommt einfach alles ab der Position instr + 1