2017-02-22 4 views
1

Ich habe eine Zeichenfolge wie unten, und ich brauche 10472314 drin. Es ist das letzte Wort in diesem Fall. Kannst du mir wissen, wie man es im PL/SQL-Block bekommt? Irgendeine Zeichenkettenfunktion?Wie erhält man das zweitletzte Wort in einer Zeichenfolge?

processed "SCOTT"."PRINCE05"       10472314 rows 

@ UPDATE

Schließlich gelang es mir, eine Lösung unter Verwendung von String-Funktionen zu bauen.

+0

Wenn Sie ehrlich sind, werden Sie zugeben, dass, wenn Sie die Frage noch einmal lesen (und so tun, als wüssten Sie nicht, worum es geht), es für Sie selbst keinen Sinn ergibt. Wie soll es in den USA Sinn machen? Was meinst du mit "die Anzahl der Zeilen in einer Zeichenfolge"? Und was hat das mit "Wie bekomme ich ein bestimmtes Wort ** in String" (IHR Titel) zu tun? – mathguy

+0

Danke für den Kommentar. Ich habe den Titel und die Aussagen geändert. Es tut mir Leid, dass ich dich verwirrt habe. – Sigularity

+0

OK - Ich nehme an, du meinst das "vorletzte" Wort (was bedeutet, zweites Wort vom Ende der Zeichenfolge). Ist es das, was du immer brauchst, das vorletzte Wort in einer Zeichenkette? Und wie definieren Sie "Wort" - alles getrennt durch Leerzeichen (oder durch Leerzeichen, Tabulatoren, Zeilenumbrüche - was wird allgemein als "Leerzeichen" bezeichnet)? – mathguy

Antwort

0

Wenn wir eine '-1' magische Option in INSTR verwenden, können wir die Zeichenfolge in umgekehrter Reihenfolge suchen. Auf diese Weise glaube ich, dass wir das letzte Wort wie das Folgende finden können. Es sieht schmutzig aus, aber es funktioniert nur für mich.

SELECT SUBSTR(name, INSTR(name, ' ', -1 , 2) + 1 , INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2)) 
FROM prince_test; 

INSTR(name, ' ', -1 , 2) + 1 ==> the second occurrence of SPACE 
INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2) ==> position gap between the first occurrence and the second. 
1

Der Satz von Stellen vor dem Wort 'Reihen' am Ende der Zeichenkette:

regexp_replace(text, '^(.+)([0-9]+)(rows)$', '\2') 

Das dritte Wort:

regexp_substr(text, '\S+', 1, 3) 

Das zweite letzte Wort (die n Das Wort wo n = die Anzahl der Wörter -1):

regexp_substr(text, '\S+', 1, regexp_count(text,'\S+') -1) 

Wenn Sie eine erhebliche Anzahl von Zeilen verarbeiten, können die Regex-Funktionen langsam sein. Die Abwägung, die Sie vornehmen müssen, liegt zwischen der Aussagekraft regulärer Ausdrücke und der Leistung von plain substr und instr. Persönlich bevorzuge ich Regexes, es sei denn, es gibt ein klares Leistungsproblem.

+0

Es funktioniert. Danke für den Kommentar. – Sigularity

Verwandte Themen