私はさまざまな状態を保持するデータベースを持っていますが、私はsmallintであるidを使ってこれらの状態をフィルタリングしようとしています。入力は@States
の12
値は、私がin(1,2,3)
としてストレートでのステートメントに行くだろう期待していた1,2,3
あるべきと言うとき今MySQL IN()文でのvarcharの使用
Declare StateList varchar(150);
Declare States varchar(150);
set @StateList = State;
set @States = '';
if (@StateList Like '%1%')then
if(LENGTH(@States) > 0) then set @States := Concat(@States, ',1,2');
else set @States := Concat(@States, '1,2');
end if;
end if;
if(@StateList Like '%2%')then
if(LENGTH(@States) > 0) then set @States := Concat(@States, ',3');
else set @States := Concat(@States, '3');
end if;
end if;
if(@StateList Like '%3%')then
if(LENGTH(@States) > 0) then set @States := Concat(@States, ',4,5');
else set @States := Concat(@States, '4,5');
end if;
end if;
Select *
from ticket_state
Where ticket_state in (@States)
:私はIN()ステートメントを使用しています。これを行うために
しかし、これはシーケンスの最初の数値を状態のために返すだけです。これは私が望まないものです。
これはなぜ動作しないのですか?
@Statesは、varchar型の値のリストがあるように私には思えます。つまり、それぞれをアポストロフィで囲む必要があります。 – knagaev
ちょっとしたコメント:ユーザー変数宣言(@変数名= ...を設定)を複合ステートメント変数宣言(variable_name宣言)と混在させています。最初に2つの宣言ステートメントは必要ありません。これらの変数はコード内で使用していません。 – Shadow