我有一个过程 A 需要一个字符串数组。通过调用另一个过程 B,我以这种格式打破了这个数组:
'1','2','3','4'
如果只有一个值,则显示为'1'
如果数组传递给过程A,我想返回*
。因此,我的查询将是这样的:select * from users where userId(*);
我想要的是,如果参数为空,它仍然应该执行IN使用。
** 编辑 ** 没什么查询
CREATE DEFINER=`root`@`localhost` PROCEDURE `listAll`(IN id varchar(200))
BEGIN
set @t = lib_explode(',',id);
select * from city where ID in(@t);
END
程序 B
CREATE DEFINER=`root`@`localhost` FUNCTION `lib_explode`(sSepar VARCHAR(255), saVal TEXT) RETURNS varchar(200) CHARSET utf8
body:
BEGIN
IF sSepar IS NULL OR saVal IS NULL THEN LEAVE body; END IF;
SET @saTail = saVal;
SET @iSeparLen = LENGTH( sSepar );
set @mystring = '';
set @current_pos = 1;
create_layers:
WHILE @saTail != '' DO
# Get the next value
SET @sHead = SUBSTRING_INDEX(@saTail, sSepar, 1);
SET @saTail = SUBSTRING( @saTail, LENGTH(@sHead) + 1 + @iSeparLen );
-- INSERT INTO lib_Explode SET val = @sHead;
if(@current_pos > 1) then
set @mystring = concat(@mystring,',',concat("'",@shead,"'"));
else
set @mystring = concat(@mystring,concat("'",@shead,"'"));
end if;
set @current_pos = @current_pos + 1;
END WHILE;
return @mystring;
END