2017-10-18 1 views
1

Nach dem zweiten Leerzeichen muss ich die Werte bis zur bestimmten Position in der Zeichenfolge abrufen. Quelle:split_part Funktion von nth Split bis zum Ende der Zeichenfolge

"8 115 MACKIE STREET VICTORIA PARK WA 6100 AU" 
"6A CAMBOON ROAD MORLEY WA 6062 AU"  

Ausgang:

"MACKIE STREET VICTORIA PARK" 
"CAMBOON ROAD MORLEY" 

Ich versuche, die Straßennamen und Vorort von der Einheit #, Straße # in dem Anfang und der Staat, Postleitzahl aufzuspalten, Land in das Ende.

Antwort

0
t=# with s(v) as (values('6A CAMBOON ROAD MORLEY WA 6062 AU'),('8 115 MACKIE STREET VICTORIA PARK WA 6100 A')) 
, split as (select *,count(1) over (partition by v) from s, regexp_matches(v,'([A-Z]+)','g') with ordinality t(m,o)) 
select distinct v,string_agg(m[1],'') over (partition by v) from split where o <= count-(3-1); 
         v      |   string_agg 
---------------------------------------------+------------------------------ 
8 115 MACKIE STREET VICTORIA PARK WA 6100 A | MACKIE STREET VICTORIA PARK 
6A CAMBOON ROAD MORLEY WA 6062 AU   | CAMBOON ROAD MORLEY 
(2 rows) 

I ausgeschlossen Index (oder jede nicht sitzende Maske [A-Z]+) somit nicht drei Positionen vom Ende schneiden, aber zwei (3-1) wobei 1 voraus Index bekannt ist.

Auch ich starte nicht aus dem zweiten Raum, da es gegen Ihr gewünschtes Ergebnis wäre ...

Verwandte Themen