0

パラメータを取り、簡単な情報を取得するための便利なテーブルにクエリを実行できるユーティリティ ストアド プロシージャを作成しようとしています。このために、以下に示すように、渡されたパラメーターの前後に「%」文字を追加して、クエリで使用できるようにする必要がありますlike

作業コード - ハードコードされている場合

select some_field from TABLE where nm_field like ('%'+'abc'+'%')

しかし、変数で同じものを使用しようとすると、上記のクエリと比較して結果が少なくなります

declare @nm char(100)
select @nm = 'abc'
select some_field from TABLE where nm_field like ('%'+@abc+'%')

いくつかの調査、試行錯誤の結果、次の select は、「%」がパラメーターの前にのみ追加され、両側に追加されていないことを示しています。

declare @name char(20), @other char(20)
select @name = 'abc'
select @other = ('%' + @name + '%')
select @other

期待される出力

%abc%

しかし、実際の出力

%abc

Sybase ASE-12.5.4 を使用しています

ここで何がうまくいかないのか教えてください。

4

2 に答える 2

0

どうやら、私は正しい答えを見つけたようです。charサイズが固定されているため、この動作につながるのは の使用です。varcharそうではないため、連結は期待どおりに機能します。

では、連結が期待どおりに行われるようcharに追加する必要がありますtrim

declare @str char(100)
select @str ='abc'
select ('%'+ltrim(rtrim(@str))+'%')

出力

%abc%
于 2013-08-27T12:36:24.317 に答える
0

@nm以下のように型を varcharに変更してみてください

declare @nm varchar(100) 
select @nm = 'abc'
select some_field from TABLE where nm_field like ('%'+@abc+'%')

Charタイプのサイズは一定で、db はスペースを使用してギャップを埋めます

declare @nm char(100) 
select @nm = 'abc' 

選択する

select @nm

abc と 97 個のスペースを返します。

于 2013-08-26T11:11:52.333 に答える