由于MySQL没有split功能,因此只能自己弄一个。
但MySQL函数不能返回结果集,所以没法以select xxx()这种方式使用。
也许我们可以写一个procedure,我按题主的要求大致实现了一个,或许可以参考一下:
DROP PROCEDURE IF EXISTS containsOnly;
DELIMITER $$
CREATE PROCEDURE containsOnly(search VARCHAR(600))
BEGIN
DECLARE result varchar(100);
DECLARE i INT DEFAULT 1;
DROP TABLE IF EXISTS tmp_table;
CREATE TEMPORARY TABLE tmp_table (
tag VARCHAR(100) NOT NULL,
replacedtag VARCHAR(100)
);
insert into tmp_table(tag,replacedtag) select tag,replace(concat('|',tag,'|'),',','||') from table1;
label:LOOP
SET result = REPLACE(SUBSTRING(SUBSTRING_INDEX(search, ',', i)
, LENGTH(SUBSTRING_INDEX(search, ',', i - 1)) + 1), ',', '');
IF result = '' THEN
LEAVE label;
END IF;
update tmp_table set replacedtag = replace(replacedtag,concat('|',result,'|'),'');
SET i=i+1;
END LOOP;
select tag from tmp_table where replacedtag='';
END $$
调用起来很方便,只需要:
call containsOnly('2,10')