2017-10-19 5 views
0

J'ai une table maître tenant la liste des types de rues possibles:Comment rechercher un tableau de chaînes pour correspondre à une valeur dans une colonne?

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

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

J'ai une table où l'adresse est chargée et je dois analyser la chaîne pour faire une recherche sur le type de rue principale pour aller chercher la banlieue suivant la rue.

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'); 

Sortie prévue:

VICTORIA PARK 
BAYVIEW 
CAMDEN SOUTH 

Toute technique PostgreSQL pour rechercher un tableau de valeurs contre une colonne de table et récupérer les données après le mot correspondant?

Si je suis en mesure d'aller chercher les données présentes après le type de rue, alors je peux supprimer l'état des 3 derniers champs, le code postal et le code du pays pour identifier la banlieue.

Répondre

0

Cette requête fait ce que vous demandez l'aide 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 || ' '); 

Le regexp ' (.*) \D+ \d+ \D+$' expliqué étape par étape:

.. interlignage (le delimiter supposé, autre chose comme 'BROAD' serait match 'ROAD')
(.*) .. parenthèses de capture avec 0-n caractères arbitraires: .*
\D+ .. 1-n non-chiffres
\d+ .. 1-n chiffres
$ .. fin de chaîne

The manual on POSIX Regular Expressions.

Mais il repose sur le format donné de mailing_address. Le format de vos chaînes est-il fiable?

Et les banlieues peuvent avoir des mots comme «STREET» etc. dans le cadre de leur nom - l'approche semble peu fiable sur le principal.

BTW, il est aucun impliqué, vous semblez confondre les tableaux et les ensembles.

+0

Merci Erwin, ça marche pour moi. J'essaie de comprendre '(. *) \ D + \ d + \ D + $', mais incapable de le faire. –

+0

@HarinathArasu: J'ai ajouté quelques explications et un lien vers les détails dans le manuel. –