2017-10-18 164 views
1

第二個空格後,我需要取值直到字符串中的特定位置。 來源:從第n個分割到字符串結尾的split_part函數

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

輸出:

"MACKIE STREET VICTORIA PARK" 
"CAMBOON ROAD MORLEY" 

我試圖從單元#分裂街道名稱和郊區,街道#出現在開頭和狀態,郵編,目前國結束。

回答

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) 

我排除索引(或任何不嵌合掩模[A-Z]+),從而切割從所述端不三個位置,而是兩個(3-1)其中1是提前公知的指數。

另外,我不從第二個空間開始,因爲它會違揹你想要的結果...