2016-12-09 5 views
1

Ich brauche das zweite Wort jedes Namens in einer Spalte, ich habe meine Forschung über substr und Instr, aber ich denke, ich habe einen logischen Fehler, kann ich einfach nicht darauf hinweisen .Abrufen des zweiten Wortes aus einer Zeichenfolge in SQL Oracle

select substr(vendor_name,instr(vendor_name, ' ')+1) from vendors ORDER BY vendor_id asc; 

Here is my current output, the code works, but it does not do what I want it to do.

+0

regexp_substr ist dein Freund ... viel besser als substr und instr – OscarAkaElvis

Antwort

1

Diese Abfrage:

SELECT SUBSTR(vendor_name, 
       INSTR(vendor_name, ' ', 1, 1) + 1, 
       INSTR(vendor_name, ' ', 1, 2) - INSTR(vendor_name, ' ', 1, 1) - 1) 
FROM vendors 
ORDER BY vendor_id 

Um zu sehen, wie das funktioniert, nehmen Sie ein Beispiel vendor_name von Boeing Corporation Inc. In diesem Fall:

INSTR(vendor_name, ' ', 1, 1) = 7 = first occurrence of space 
INSTR(vendor_name, ' ', 1, 2) = 19 = second occurrence of space 

hier Jetzt ist die Anruf machen wir zu Teilzeichenfolge:

SELECT SUBSTR('Boeing Corporation Inc.', 
       7 + 1, 
       19 - 7 - 1) 

, die die gleiche ist wie

SELECT SUBSTR('Boeing Corporation Inc.', 8, 11) = 'Corporation' 

Beachten Sie, dass meine Antwort geht davon aus, dass es einen zweiten Raum in der vendor_name (und auch einen ersten Raum) ist. Wenn Sie in dieser Spalte komplexe Daten erwarten, sollten Sie stattdessen einen regulären Ausdruck verwenden.

+0

Ok toll, das funktioniert, vielen Dank, aber ich verstehe nicht den letzten Teil, wo Sie subtrahieren. Ich verstehe, dass der erste Teil erhalten Sie die Zeichenfolge, mit dem nächsten Wort, +1, um den Raum zu entfernen. Aber danach versuche ich die Schritt für Schritt Eingabe, und die Ausgabe macht keinen Sinn, wie kann es mir diese geben [Link] (http://i.imgur.com/W66oy4N.png) wenn meine Eingabe ist dies: 'SELECT SUBSTR (Kreditor_Name, INSTR (Kreditor_Name, '', 1, 1) + 1, INSTR (Kreditor_Name, '', 1, 2)) FROM Lieferanten ORDER BY Vendor_ID;' –

+0

Ursache müssen Sie fügen Sie der Funktion Substr einen dritten Parameter hinzu, um die Länge der extrahierten Zeichenfolge zu begrenzen. 'INSTR (Kreditorenname, '', 1, 2) - INSTR (Kreditorenname, '', 1, 1) - 1 'ist die Länge zwischen dem ersten und zweiten Leerzeichen. –

+0

@AlexTonitoi Lassen Sie mich ein Beispiel hinzufügen, und Sie werden sehen, was passiert. –

Verwandte Themen