如何查找字符串数组以匹配列中的值?

问题描述:

我有一个主表持有可能街类型的列表:如何查找字符串数组以匹配列中的值?

CREATE TABLE land.street_type (
    str_type character varying(300) 
); 

insert into land.street_type values 
    ('STREET'), 
    ('DRIVE'), 
    ('ROAD'); 

我在其中的地址被装入一个表,我需要解析字符串做在主街道类型查找,以获取郊区跟随街道。

CREATE TABLE land.bank_application (
    mailing_address character varying(300) 
); 

insert into land.bank_application values 
    ('8 115 MACKIE STREET VICTORIA PARK WA 6100 AU'), 
    ('69 79 CABBAGE TREE ROAD BAYVIEW NSW 2104 AU'), 
    ('17 COWPER DRIVE CAMDEN SOUTH NSW 2570 AU'); 

预期输出:

VICTORIA PARK 
BAYVIEW 
CAMDEN SOUTH 

任何PostgreSQL的技术来查找值的阵列针对一个表列和获取数据的匹配字以下?

如果我能够获取街道类型后存在的数据,那么我可以从中删除最后3个字段的状态,邮政编码和国家代码以识别郊区。

这个查询做了你问什么使用regular expressions

SELECT substring(b.mailing_address, ' ' || s.str_type || ' (.*) \D+ \d+ \D+$') AS suburb 
FROM bank_application b 
JOIN street_type s ON b.mailing_address ~ (' ' || s.str_type || ' '); 

的正则表达式' (.*) \D+ \d+ \D+$'解释一步一步:

..前导空格(假定分隔符,否则像“广义”会匹配'ROAD')
(.*) ..用0-n个任意字符捕获圆括号:.*
\D+ .. 1-n个非数字
\d+ .. 1-n个数字
$ ..串

The manual on POSIX Regular Expressions.

但它依赖于mailing_address给定格式的结束。您的字符串格式是否可靠?

郊区可以有像'STREET'等词作为他们的名字的一部分 - 这种方法似乎不可靠的原则。

顺便说一句,有没有数组涉及,你似乎混乱的数组和集合。

+0

谢谢欧文,它适合我。我试图理解'(。*)\ D + \ d + \ D + $',但无法。 –

+0

@HarinathArasu:我在手册中添加了一些解释和链接。 –