有没有办法在mysql中实现udtf的效果,逗号切割成多行?

提问者:帅平 问题分类:数据库
有没有办法在mysql中实现udtf的效果,逗号切割成多行?,例如如下的表:
CREATE TABLE `test` (
  `id` int(11) DEFAULT NULL,
  `knowledges` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test4`.`test`(`id`, `knowledges`) VALUES (1, 'a,b,c,d,e,f,g');
INSERT INTO `test4`.`test`(`id`, `knowledges`) VALUES (2, 'AA,B,C');
INSERT INTO `test4`.`test`(`id`, `knowledges`) VALUES (3, 'A');

这里的values里面是逗号,准备把它切割出来,转成多行?
3 个回答
旧梦难醒
旧梦难醒
可以使用replace+SUBSTRING_INDEX的方式把数据进行切割成多行,例如:
SELECT
	id,
	REPLACE ( SUBSTRING_INDEX( SUBSTRING_INDEX( knowledges, ',', n ), ',', - 1 ), ',', '' ) AS knowledge 
FROM
	( SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) numbers
	INNER JOIN test ON CHAR_LENGTH( knowledges ) > 0 
ORDER BY
	id,
	knowledge;

查询出来的结果如下图:

需要注意,这里的,最长能切割多少个元素,没那么在union里面就要写几个,例如我们这里的第一行,切割后是7,那么union就要到7,用5演示只是为了说明这个注意事项
发布于:6个月前 (11-08) IP属地:四川省
我来回答