2017-10-19 13 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+ .. N-1 자리 $
..

The manual on POSIX Regular Expressions.

하지만 mailing_address 주어진 포맷에 의존

문자열의 끝. 문자열의 형식이 안정적입니까?

교외 지역에는 이름의 일부로 'STREET'등의 단어를 사용할 수 있습니다. 접근 방법은 원칙적으로 신뢰할 수없는 것처럼 보입니다.

현재, 배열과 관련이 없으므로 배열과 세트가 혼동스러워 보입니다.

+0

감사합니다. Erwin, 저에게 도움이됩니다. 나는 '(. *) \ D + \ d + \ D + $'를 이해하려고 노력하고 있지만 할 수는 없습니다. –

+0

@HarinathArasu : 설명서에 자세한 설명과 링크가 추가되었습니다. –