2017-04-18 3 views
-1

Ich habe Millionen solcher recorrs, aber ich teile hier einige Datensätze was ich brauche, ist nur 8 Charcher von diesem recodrs so viele haben (.) Und einige haben (/) so entfernen (.) Abd (/) finden Sie in der Beispielausgabe Datensätze in der TabelleFinden Sie die genaue Nummer aus der Liste

GBR.FCL.AT.245448C.A 
GBR.FCL.AT.225405L.A 
at286623da 
EASA UK/AT/311969F/A 
AT/332092H/A 
AT238691G/A 

Ausgabe wie folgt

245448CA 
225405LA 
286623da 
311969FA 
332092HA 
+1

Wie erkennen Sie den Teil der Zeichenfolge, die Sie benötigen? Beginnt es immer mit AT? Und bist du sicher, dass AT genau einmal pro String vorkommt? Oder ist es der einzige Teil der Zeichenfolge, der eine Ziffer enthält? – Aleksej

+0

Nein ....................... – Skorpion

+0

Ich kann den Punkt nicht bekommen. Wie verstehst du, welchen Teil der Zeichenfolge du bekommen musst? – Aleksej

Antwort

0

Angenommen, wir können uns auf die Stichprobe als vollständig und repräsentativ (nicht immer eine sichere Annahme in SO) verlassen, die gewünschte Ausgabe sind die letzten acht Zeichen der Zeichenfolge, . und \ ignorieren.

So ist die einfachste Sache, die möglicherweise wäre funktionieren könnte die unerwünschten Zeichen Streifen aus mit translate() dann die letzten acht Zeichen zurück:

select substr(translate(str, 'a.\', 'a'), -8) as extracted_str 
from your_table 

Eine etwas engineered Lösung gelten würde Regex einen String Fein des Formats 999999AA:

select regexp_replace(translate(str, 'a.\', 'a'), 
        '^(.*)([[:digit:]]{6}[[:alpha:]]{2})(.*)$', '\2' 
    ) as extracted_str 
from your_table 
0
sein sollte

Unter der Annahme, dass Sie 8 Zeichen bekommen müssen, ohne / und ., ausgehend von der st AT Ring (ganz gleich der Fall ist) und dass es genau ein Vorkommen von AT (in jedem Fall Kombination) in der Eingabezeichenfolge, sollte das sein, was Sie brauchen:

with input(x) as (
    select 'GBR.FCL.AT.245448C.A' from dual union all 
    select 'GBR.FCL.AT.225405L.A' from dual union all 
    select 'at286623da' from dual union all 
    select 'EASA UK/AT/311969F/A' from dual union all 
    select 'AT/332092H/A' from dual union all 
    select 'AT238691G/A' from dual 
) 
select x as yourString, 
     substr(translate(x, 'x/.', 'x'), instr(translate(upper(x), '/.x', 'x'), 'AT')+2, 8) as result 
from input 

Welche gibt:

YOURSTRING   RESULT 
-------------------- -------------------------------- 
GBR.FCL.AT.245448C.A 245448CA 
GBR.FCL.AT.225405L.A 225405LA 
at286623da   286623da 
EASA UK/AT/311969F/A 11969FA 
AT/332092H/A   332092HA 
AT238691G/A   238691GA 
Verwandte Themen