Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL varchar包含_Mysql - Fatal编程技术网

MySQL varchar包含

MySQL varchar包含,mysql,Mysql,我试图获取索引列表,然后使用它们将varchar设置为特定字符串,以便在数据库中进行筛选。问题是我尝试使用Like命令: Declare StateList varchar(150); Declare States varchar(150); set @StateList = State; set @States = ''; if (@StateList Like '%1%')then set @States := Concat(@States, '1,2'); elseif(@StateLi

我试图获取索引列表,然后使用它们将varchar设置为特定字符串,以便在数据库中进行筛选。问题是我尝试使用Like命令:

Declare StateList varchar(150);
Declare States varchar(150);
set @StateList = State;
set @States = '';

if (@StateList Like '%1%')then set @States := Concat(@States, '1,2');
elseif(@StateList Like '%2%')then set @States := Concat(@States,'3');
elseif(@StateList Like '%3%')then set @States := Concat(@States, '4,5');
end if;
select @StateList,@States;
当我输入
123
时,当我希望它返回1到5时,它将只返回3

然后我试着

Declare StateList varchar(150);
Declare States varchar(150);
set @StateList = State;
set @States = '';

if CONTAINS(@StateList, '1')then set @States := Concat(@States, '1,2,');
elseif CONTAINS(@StateList ,'2')then set @States := Concat(@States,'3');
elseif CONTAINS(@StateList,'3')then set @States := Concat(@States, '4,5');
end if;
select @StateList,@States;
结果什么都没有,我很困惑,因为我认为第一个解决方案会奏效

任何建议都很好!
提前感谢

您应该使用单独的
IF
IF,elseif
表示只有一个是真的。试着这样做:

if (@StateList Like '%1%')then set @States := Concat(@States, '1,2');
end if;
if(@StateList Like '%2%')then set @States := Concat(@States,'3');
end if;
if(@StateList Like '%3%')then set @States := Concat(@States, '4,5');
end if;

我同意@sagi关于IFs应该分开的说法,但是我想知道结果是“3”而不是“1,2”。也许你可以试试这个功能 因此,代码将是:

if (INSTR(@StateList, '1') > 0)then set @States := Concat(@States, '1,2');
end if;
...

MySQL是否具有CONTAINS()函数?可能没有,这是我在搜索解决方案时遇到的问题。我不认为它在MySQL中,但我还是试过了。关于这个问题的一切都表明了一个问题。你确定你的模式是正确的关系型的吗?数据库很好,用户得到的是给定的打开、关闭和挂起选项。这些值是1,2,3,但有些状态可能有子状态,我试图在查询运行时获取这些值。没错!我可以相信我没有看到我做了什么,第一个if没有返回结果这一事实让我很失望。谢谢你的帮助!是的@sagi解决方案确实有效,但我也被这个问题弄糊涂了,所以我只是假设它不是问题所在