2017-12-18 3 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としてフレーズだろう

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は有効ではない」と述べたので、私は自分の答えを編集しました。そうであれば私の前の答えも失敗するでしょう。恐らくこのように削除すると問題が解決されます。 –

+0

DB2にはロケート機能もあります。 locate(trim(t2.column_b)、t1.column_a)<> 0では、2番目のrtrimは必要ありません。本当に答えを閉じてください。私はもう一度upvoteできません。 – danny117