在MySQL IN()语句中使用varchar

时间:2016-05-05 08:39:40

标签: mysql sql

我有一个包含不同状态的数据库,我试图使用id为smallint过滤这些状态。

为此,我使用IN()语句:

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)

现在,当输入结果为12时,@States的值应为1,2,3,我希望将其作为in(1,2,3)直接进入in语句,但这只是返回状态序列中的第一个数字,这是我不想要的。

任何人都知道为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

IN(1,2,3)这样的声明会起作用,但这不是你在这里所拥有的。你有一个字符串,所以它就像IN('1,2,3')

您可以使用FIND_IN_SET功能来实现您的目标。

示例:

SELECT FIND_IN_SET(2, '1,2,3'); -- returns 2

尝试:

SELECT * 
FROM ticket_state
WHERE FIND_IN_SET(ticket_state,@States)