2017-10-19 5 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+$'は、ステップバイステップで説明した:

を..先頭にスペース(仮定区切り、 'BROAD' のような何か他のものでしょう一致 'ROAD')
(.*) .. 0-n任意の文字でキャプチャカッコ:.*
\D+ .. 1-nの非数字
\d+ ... 1-n桁
$ ..ストリング

The manual on POSIX Regular Expressions.

の端しかしmailing_addressの所定の形式に依存しています。あなたのストリングのフォーマットは信頼できるのですか?

郊外では、名前の一部に 'STREET'などの言葉を使用することができます。そのアプローチは、原則では信頼性が低いようです。

ところで、はありません。配列が含まれていると、混乱している配列やセットのようです。

+0

ありがとう、アーウィン、それは私のために働く。私は '(。*)\ D + \ d + \ D + $'を理解しようとしていますが、できません。 –

+0

@HarinathArasu:説明書と詳細へのリンクをマニュアルに追加しました。 –

関連する問題