mysql字符串分割函数(⾏转列)
由于⼯作需要需要处理⼀些以逗号分隔的字符串,每次都要现做很是⿇烦,⽹上了很多都没有现成的,好吧,⾃⼰动⼿写⼀个好了 1CREATE DEFINER = `harri`@`%` FUNCTION `str_for_substr`(`num` int, `str` varchar(5000))
2RETURNS varchar(100)
3BEGIN
4/*函数功能: 把带逗号的字符串分割取出
5参数: num 要取出的字符串的索引值, 以0开始
6 str 以逗号分割的字符串
7扩展: 将逗号替换成其他符合,即可完成不同分隔符拆分字符串,亦可以把分隔符作为参数
8*/
9SET@str_for_substr=
10
11SUBSTRING(
12 SUBSTRING_INDEX(str, ',', num +1),
13CASE num
14WHEN0THEN
15 CHAR_LENGTH(
16 SUBSTRING_INDEX(str, ',', num)
17 ) +1
18ELSE
19 CHAR_LENGTH(
20 SUBSTRING_INDEX(str, ',', num)
21 ) +2
22END,
23CASE num
24WHEN0THEN
25 CHAR_LENGTH(
26 SUBSTRING_INDEX(str, ',', num +1)
27 ) - CHAR_LENGTH(
28 SUBSTRING_INDEX(str, ',', num)
29 )
30ELSE
31 CHAR_LENGTH(
32 SUBSTRING_INDEX(str, ',', num +1)
33 ) - CHAR_LENGTH(
34 SUBSTRING_INDEX(str, ',', num)
35 ) -1
36END
37 );
38
39
40RETURN@str_for_substr;
41END;
测试:
mysql> SELECT str_for_substr(3,'one,two,three,four,five,six,seven') as 'value';
+-------+
| value |
+-------+
| four |
+-------+
1 row in set
实例应⽤
mysql> select * from test;
+---+------------------------+
| a | b |
+---+------------------------+
| 1 | 你好,哈哈,不错 |
| 2 | 测试,不错 |
| 3 | test,test2,test3,test4 |
| 4 | 你好,哈哈,不错 |
| 5 | 你好,哈哈,不错 |
| 6 | 你好,哈哈,不错 |
| 7 | 你好,哈哈,不错 |
| 8 | 你好,哈哈,不错 |
+---+------------------------+
8 rows in set
创建存储过程如下
CREATE DEFINER = `root`@`%` PROCEDURE `split_str`()
SQL SECURITY INVOKER
BEGIN
DECLARE a1 varCHAR(20);
DECLARE b1 varchar(10000);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT a,b from test ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur;
read_loop: LOOP
FETCH cur INTO a1,b1;
IF done THEN
LEAVE read_loop;
END IF;
SET@num= LENGTH(b1) - LENGTH(REPLACE(b1, ',', ''));
SET@i=0;
WHILE (@i<=@num ) DO
INSERT INTO test1
VALUES
(
a1,
mysql 字符串转数组str_for_substr(@i,b1)
)
;
set@i=@i+1;
END WHILE;
END LOOP;
CLOSE cur;
END;
执⾏结果如下
mysql> select * from test1;
+---+-------+
| a | b |
+---+-------+
| 1 | 你好 |
| 1 | 哈哈 |
| 1 | 不错 |
| 2 | 测试 |
| 2 | 不错 |
| 3 | test |
| 3 | test2 |
| 3 | test3 |
| 3 | test4 |
| 4 | 你好 |
| 4 | 哈哈 |
| 4 | 不错 |
| 5 | 你好 |
| 5 | 哈哈 |
| 5 | 不错 |
| 6 | 你好 |
| 6 | 哈哈 |
| 6 | 不错 |
| 7 | 你好 |
| 7 | 哈哈 |
| 7 | 不错 |
| 8 | 你好 |
| 8 | 哈哈 |
| 8 | 不错 |
+---+-------+ 24 rows in set
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论