2017-10-18 4 views
1

Après le deuxième espace, j'ai besoin de récupérer les valeurs jusqu'à la position particulière dans la chaîne. Source:Fonction split_part de la nième division jusqu'à la fin de la chaîne

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

sortie:

"MACKIE STREET VICTORIA PARK" 
"CAMBOON ROAD MORLEY" 

Je suis en train de diviser le nom de la rue et la banlieue de l'unité #, rue # présente au début et l'état, code postal, pays présent dans la fin.

Répondre

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 exclus index (ou un masque [A-Z]+ ne convient pas) coupant ainsi non pas trois positions de la fin, mais deux (3-1) où 1 est l'indice d'avance connu.

Aussi je ne commence pas à partir du deuxième espace car ce serait contre votre résultat souhaité ...