有没有办法在mysql中实现udtf的效果,逗号切割成多行?
有没有办法在mysql中实现udtf的效果,逗号切割成多行?,例如如下的表:
这里的values里面是逗号,准备把它切割出来,转成多行?
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里面是逗号,准备把它切割出来,转成多行?
发布于:10个月前 (11-08) IP属地:四川省
3 个回答
可以使用replace+SUBSTRING_INDEX的方式把数据进行切割成多行,例如:
查询出来的结果如下图:
需要注意,这里的,最长能切割多少个元素,没那么在union里面就要写几个,例如我们这里的第一行,切割后是7,那么union就要到7,用5演示只是为了说明这个注意事项
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演示只是为了说明这个注意事项
发布于:10个月前 (11-08) IP属地:四川省
我来回答
您需要 登录 后回答此问题!