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

How to lookup an array of strings to match a value in a column?

我有一个大师 table 持有可能的街道类型列表:

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

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

我有一个 table,其中加载了地址,我需要解析字符串以在主街道类型上进行查找以获取街道后的郊区。

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 技术可以根据 table 列查找值数组并获取匹配词后的数据?

如果我能够获取街道类型后的数据,那么我可以从中删除最后 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+$' 逐步解释:

</code> .. 前导 space(假定的分隔符,否则像 'BROAD' 会匹配 'ROAD')<br> <code>(.*) .. 捕获带有 0-n 个任意字符的括号:.*
\D+ .. 1-n 个非数字
\d+ .. 1-n 位
$ .. 字符串结尾

The manual on POSIX Regular Expressions.

但它依赖于mailing_address的给定格式。你的字符串格式靠谱吗?

郊区可以在名称中包含 'STREET' 等词 - 这种方法似乎不可靠。

顺便说一句,没有数组,你好像混淆了数组和集合。