2016-12-15 3 views
0

텍스트 필드에 따라 두 개의 테이블을 결합해야하는 고유 한 경우가 있습니다.PostgreSQL을 사용하여 문자열 부분 잘라 내기

COLUMNA

Amz-g-r-t 
Amz-g-r2-t 
Amz-g1-r-t-x 

와 두 번째 테이블의 열 힘은 같은 행에 더 많은 값을 포함

:

것은 하나 개의 테이블에 조인 열이 있다는 것이다 (내가 아는 horibble 어느 것) :

COLUMNB

Amz-g-r-t not to ship 
Amz-g-r2-t OK 
Amz-g1-r-t-x 

Basicly I 싶어 할 :

select * 
from A 
join B on (a.ColumnA=b.ColumnB) 

하지만 때문에 B. 의 데이터 작동하지 않습니다 그래서 나는 최초의 우주 후 B 행의 모든 ​​문자를 제거하는 방법이 필요합니다. 그래서 COLUMNB은 다음과 같습니다

Amz-g-r-t 
Amz-g-r2-t 
Amz-g1-r-t-x 

내가 어떻게 할 수 있습니까?

+0

pg의 버전은 무엇입니까? –

+0

@EvanCarroll PostgreSQL 9.3 – Johnathan

+0

'-'로 구분되는 모든 것이 중요한 것 같습니다. 나는 그것들을 그들 자신의 기둥으로 부수는 것을 고려할 것이다. –

답변

4

split_part() 기능을 사용할 수 있습니다.

select * 
from A 
join B on a.ColumnA=split_part(b.ColumnB, ' ', 1) 

split_part (문자열 텍스트, 구분 텍스트 필드 int)를 구분에 분할 문자열과 지정된 필드

성능이 저하 될 것입니다 (하나부터 계산)을 반환뿐만 아니라 열이 있기 때문에 텍스트 유형뿐만 아니라 질의를 만드는 조인 열에 대한 함수를 사용하기 때문에 비 SARGABLE

+0

'split_part (b.ColumnB,' ', 1)'에 색인을 생성 할 수 있습니다. –

+0

좋은 대답 ..... mhasan –