如何查找字符串数组以匹配列中的值?
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' 等词 - 这种方法似乎不可靠。
顺便说一句,没有数组,你好像混淆了数组和集合。
我有一个大师 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' 等词 - 这种方法似乎不可靠。
顺便说一句,没有数组,你好像混淆了数组和集合。