2017-08-23 6 views
-2

I Used String für diese AbfrageUngültige Nummer In substr

to_number(substr(skidno,instr(skidno,'/')+1,length(skidno))) 

das i für ths Abfrage übergeben werden Skid keine 'MMM-1718/000325/1' ich erhielt ungültige Nummer

+0

Ich denke, Sie erhalten das Leerzeichen und die 1, und das kann nicht in eine Zahl umgewandelt werden – Jens

+0

wo ist die Abfrage genau? –

+0

skid no pass für die Abfrage – siva

Antwort

1

Sie nicht konvertieren es zu nummerieren, weil Sie "/" im Ergebnis erhalten. Ergebnis: '000325/1'.

Wenn Sie nur benötigen nur die Zahl zwischen ‚/‘ dann unten probieren:

to_number(substr(skidno ,instr(skidno ,'/')+1, 
instr(skidno ,'/',1,2) -instr(skidno ,'/',1,1)-1)) 
1

Wenn Ihre Notwendigkeit, den Teil nach dem zweiten Auftreten von „/“ zu extrahieren ist; Die folgende Abfrage genügt Ihren Bedarf ---

select to_number(trim('/' FROM 
         substr('MMM-1718/000325/1', 
          instr('MMM-1718/000325/1', '/', 1, 2)))) 
    from dual; 
1

Möglicherweise möchten Sie regexp_substr verwenden. Wenn Sie wollen nur die Zahl am Ende des Wertes erhalten:

to_number(regexp_substr(skidno, '\d+$')) 
0

Da Sie Teil der Zeichenfolge benötigen, das von Zeichen ‚/‘ nach dem zweiten Auftreten beginnt und geht zum Ende der Zeichenfolge, die folgenden Lösung ist wahrscheinlich die einfachste mit substr/instr:

with t as 
(
    select 'MMM-1718/000325/1' mystring 
    from dual 
) 
select to_number(substr(mystring, instr(mystring, '/', 1, 2) + 1)) 
    from t; 

Hinweis: in diesem Fall müssen Sie nur noch in Funktion substr Ausgangsposition definieren; Länge der Zeichenfolge wird nicht benötigt.

+0

Obwohl dies mehr oder weniger das ist, was Pratik in seiner Antwort schrieb. –