日期:2014-05-16  浏览次数:20741 次

急求mysql 存储过程中,in 查询字符问题?
存储过程中有个查询需要用 in 来查询,里面字符已参数传递进来
CREATE PROCEDURE `myTest`(str1 varchar(200))
BEGIN
select str1;
select * from table where str1 in (str1);  
END;

1:call myTest('abc'); ok ,没问题,当我吧参数拼装到多个之后,就不行了,例如('abc,def')或者("'abc','def'");

如下
2:call myTest("'abc','def'");call myTest('abc,def');

都不行,我直接select * from table where str1 in ('abc','def'); 这样是可以的

有人知道,是咋回事吗,这个问题我今天弄了一下午了,始终没能解决掉,希望大家能指点我下,谢过了! 


------解决方案--------------------
declare stmt varchar(4000);
set @v_sql = concat('select * from table where str1 in (', i_param,')'); ---i_param= 'abc','def'
prepare stmt from @v_sql;
execute stmt;
------解决方案--------------------
两个问题,1)要用FIND_IN_SET,2)变量名和字段名不要重复

SQL code
CREATE PROCEDURE `myTest`(v_str1 varchar(200))
BEGIN
select v_str1;
select * from table where FIND_IN_SET(str1,v_str1) 
END;

------解决方案--------------------
1、用动态语句执行

declare stmt varchar(4000);
set @v_sql = concat('select * from tt where str1 in (', i_param,')');
prepare stmt from @v_sql;
execute stmt;

2、用FIND_IN_SET OR INSTR函数
select * from table where FIND_IN_SET(str1,v_str1) 
select * from table where instr(str1,v_str1)
------解决方案--------------------
set @sql=concat='select IFNULL(str1,'') from table';

你的语法也错得太多了吧。

set @sql=concat('select IFNULL(str1,\'\') from table');
------解决方案--------------------
set @sql=concat('select IFNULL(str1,\'\ ') from table');
用两个空格 OR * 均可