如何查找字符串数组以匹配列中的值?
问题描述:
我有一个主表持有可能街类型的列表:如何查找字符串数组以匹配列中的值?
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'等词作为他们的名字的一部分 - 这种方法似乎不可靠的原则。
顺便说一句,有没有数组涉及,你似乎混乱的数组和集合。
谢谢欧文,它适合我。我试图理解'(。*)\ D + \ d + \ D + $',但无法。 –
@HarinathArasu:我在手册中添加了一些解释和链接。 –