本节内容:
mysql/ target=_blank class=infotextkey>mysql数据库中实现split函数的例子。
--场景:有A B两表,A表中的某一字段bids存放着一个B表主键的数组如3,4,5 而这个时候要做关联查询时,理想情况应该可以这样做
但是mysql并不支持这样做,也没有提供类似的做法。
有一种变态的做法就是给bids做一下处理,就是
在bids的前后都加上逗号, 这样bids就变成,3,4,5, 此时利用模糊查询来做关联即可,做法如下:
当b的id=3时候的查询相当于执行
----真实例子----
--注意,这样的效率恐怕比较低,小数据量应该没有问题,大数据量估计不能这么做
用mysql存储过程实现split函数:
DELIMITER $$
USE `teasys`$$
DROP PROCEDURE IF EXISTS `proc_split`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_split`(
inputstring VARCHAR(1000),
delim CHAR(1)
)
BEGIN
DECLARE strlen INT;
DECLARE last_index INT;
DECLARE cur_index INT;
DECLARE cur_char VARCHAR(200);
DECLARE len INT;
SET cur_index=1;
SET last_index=0;
SET strlen=LENGTH(inputstring);
DROP TABLE IF EXISTS splittable;
CREATE TEMPORARY TABLE splittable(
id INT AUTO_INCREMENT,
VALUE VARCHAR(20),
PRIMARY KEY (`ID`),
UNIQUE KEY `ID` (`ID`)
) ;
WHILE(cur_index<=strlen) DO
BEGIN
IF SUBSTRING(inputstring FROM cur_index FOR 1)=delim OR cur_index=strlen THEN
SET len=cur_index-last_index-1;
IF cur_index=strlen THEN
SET len=len+1;
END IF;
INSERT INTO splittable(`value`)VALUES(SUBSTRING(inputstring FROM (last_index+1) FOR len));
SET last_index=cur_index;
END IF;
SET cur_index=cur_index+1;
END;
END WHILE;
END$$
DELIMITER ;
//mysql split函数的调用方法
CALL proc_split('a,b,c',',');
SELECT * FROM splittable