2017-10-19 176 views
0

我有一個主表持有可能街類型的列表:如何查找字符串數組以匹配列中的值?

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個字段的狀態,郵政編碼和國家代碼以識別郊區。

回答

0

這個查詢做了你問什麼使用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:我在手冊中添加了一些解釋和鏈接。 –

相關問題