split_part函数从第n个split到string的结尾

时间:2017-10-18 21:30:56

标签: postgresql postgresql-9.4

在第二个空格之后,我需要获取值直到字符串中的特定位置。 来源:

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

输出:

"MACKIE STREET VICTORIA PARK"
"CAMBOON ROAD MORLEY"

我正试图将街道名称和郊区从单元#,街道#出现在开头,州,邮政编码,国家到底分开。

1 个答案:

答案 0 :(得分: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是前方已知索引。

此外,我不是从第二个空间开始,因为它会违背你想要的结果......