2017-12-18 42 views
1

DB2 저장 프로 시저를 작성할 때 table1.column_a가 table2.column_b로 시작하는 테이블 1과 테이블 2의 모든 값을 선택해야하는 조건이 필요합니다.SQL 조건 - 동적 값으로 시작합니다.

select * from table1 T1, table2 T2 where T1.column_a like T2.column_b + '%' 

나는 위의 SQL 주위에 놀아 보았지만 잘못된 SQL처럼 보였다. 어떤 제안?

+0

일부 샘플 테이블 데이터와 예상되는 결과를 추가하십시오. (형식이 아닌 텍스트로서, 이미지가 아닙니다.) – jarlh

+0

문제는 당신의'like' 문 –

답변

4

concat() 함수 또는 || 연결 연산자를 사용할 수 있습니다. 문자열 연결에 대한 +은 SQL Server 및 이와 유사한 데이터베이스에서 사용됩니다.

select * 
from table1 T1 join 
    table2 T2 
    on T1.column_a like concat(T2.column_b, '%'); 
+0

당신의 제안을 사용했습니다. 그러나 저장 프로 시저를 배포하는 동안 오류가 발생합니다. '좋아하는 사람의 사업은 유효하지 않습니다. SQLCODE = -132, SQLSTATE = 42824, DRIVER = 4.17.30 ' –

1

그 column_a을 고려하고 column_b가 후행 공백이 있고 like 피연산자에 문제가 있음 :이 join A와 구하고자

. 항상 left()을 사용하고 RTRIM()과 결합 할 수 있습니다. 나는 DB2에 대한 경험이 매우 제한적이지만, 이것은 나의 직감이다.

select * 
from table1 T1 
    INNER JOIN table2 T2 
    on LEFT(RTRIM(T1.column_a), LENGTH(RTRIM(T2.column_b))) = T2.column_b 
+0

이것은 가장 가까운 대답이지만 올바르게 작동하려면 rtrim (t1.column_a)이 필요하지 않습니다. – danny117

+0

@ Gouri가 'AN OPERAND OF LIKE NOT VALID'로 나와 답변을 편집했습니다. 그렇다면 내 이전 대답도 실패합니다. 아마 같이 제거하면 문제가 해결됩니다. –

+0

DB2에는 찾기 기능도 있습니다. where (trim (t2.column_b), t1.column_a) <> 0를 찾았지만 두 번째 rtrim은 필요하지 않습니다. 정말 대답을 닫지 만 다시 upvote 수 없습니다. – danny117