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のようです。助言がありますか?
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のようです。助言がありますか?
concat()
関数または||
連結演算子を使用できます。文字列連結の場合は+
がSQL Serverなどのデータベースで使用されます。
select *
from table1 T1 join
table2 T2
on T1.column_a like concat(T2.column_b, '%');
私はあなたの提案を使用しました。ただし、ストアドプロシージャをデプロイするときにエラーが発生します。 '好きなオペラは有効ではありません。 SQLCODE = -132、SQLSTATE = 42824、DRIVER = 4.17.30 ' –
はその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
これは最も近い答えですが、rtrim(t1.column_a)が正しく機能するためには必要ないと思います。 – danny117
@Gouriが「AN OPERAND OF LIKEは有効ではない」と述べたので、私は自分の答えを編集しました。そうであれば私の前の答えも失敗するでしょう。恐らくこのように削除すると問題が解決されます。 –
DB2にはロケート機能もあります。 locate(trim(t2.column_b)、t1.column_a)<> 0では、2番目のrtrimは必要ありません。本当に答えを閉じてください。私はもう一度upvoteできません。 – danny117
サンプルテーブルのデータと予想される結果を追加します。 (画像ではなく書式付きのテキストとして) – jarlh
問題はあなたの 'like'ステートメントです –