2017-05-22 2 views
0

Ich habe folgenden Wert in der Tabelle.Holen Sie den Wert mit substr und Instr in Oracle

  1. aaaaaa 26G 2.0G 23G 8 tmp
  2. tmpfs 506M 506M 0 0/dev/shm

I ersten Wert zu speichern, muß das ist ('aaaaaa' and'tmpfs') und die zweite Wert (26 und 506) in einer anderen Tabelle. Ich habe als ersten Wert CAST (substr (COL_1,1, InStr (col_1,‘‚) -1) AS VARCHAR2 (10)) col

Wie erhalte ich den zweiten Wert wie 26 und 506 mit Teilzeichenfolge und Instring.

Antwort

0

Es gibt ein optionales Argument für instr, in dem Sie das n-te Vorkommen einer bestimmten gesuchten Zeichenfolge angeben können.

CAST(substr(COL_1,InStr(COL_1,' ',1,1)+1,InStr(COL_1,' ',1,2)-InStr(COL_1,' ',1,1)-1) AS VARCHAR2(10)) 

nur um die Anzahl dieser Teilzeichen zu extrahieren, verwenden regexp_substr. Dies setzt voraus, dass Buchstaben immer einem oder mehreren numerischen Zeichen folgen.

regexp_substr(CAST(substr(COL_1,InStr(COL_1,' ',1,1)+1,InStr(COL_1,' ',1,2)-InStr(COL_1,' ',1,1)-1) AS VARCHAR2(10)),'\d+') 
+0

Es ist nicht etwas zurückgekommen, ich muss auf den zweiten Wert wie 26 und 506 und so weiter bekommen .... – shy

+0

i bearbeitet es nach dem Veröffentlichen zuerst.die neueste Version zu übertragen. –

+0

aaaaaa 26G 2.0G 23G 8 tmp Ich brauche 26 aus der zweiten Spalte. Es gibt Null zurück mit oben genannten Lösung, die Sie gab ... – shy

0

würde ich regexp_substr() empfehlen:

select regexp_substr(col1, '[^ ]+ ', 1, 1) as first, 
     regexp_substr(col1, '[^ ]+ ', 1, 2) as second 

Dies gibt den Wert mit einem Leerzeichen am Ende. Ich denke, das Muster ohne den Raum arbeitet, weil reguläre Ausdrücke in Oracle ist gierig:

select regexp_substr(col1, '[^ ]+', 1, 1) as first, 
     regexp_substr(col1, '[^ ]+', 1, 2) as second 
+0

Wie entferne ich Buchstaben G und M aus der zweiten Spalte, ich will nur Zahlen .... – shy

+0

Sie können ersetzen, oder Sie können 'substr()' oder sogar 'verwenden regexp_substr() 'erneut. –

Verwandte Themen