【发布时间】:2021-03-16 17:48:21
【问题描述】:
作为迁移任务的一部分,我需要将星号分隔的字符串中的值拆分为不同的列。例如,给定这个字符串:
Case Western Reserve University* University of Kansasi*Middle East Tech
我想回来:
| Uni1 | Uni2 | Uni3 |
|---|---|---|
| Case Western Reserve University | University of Kansasi | Middle East Tech |
字符串中可以有任意数量的分隔值,因此查询需要是动态的。
我正在研究的方法是使用存储过程来循环遍历字符串以有效地重新创建它:
SET @test = "Case Western Reserve University* University of Kansasi* Middle East Technical University";
SELECT SPLIT_STR (@test, '*',3) as third, SPLIT_STR (@test, '*',2) as second;
这是我目前所拥有的。这是一项正在进行的工作。它遍历分隔值并使用函数 (SPLIT_STR) 提取值,但在一个表格单元格中返回值。我无法将“as val1”添加到 @rval,因此它不会分成单独的列。
DELIMITER //
CREATE PROCEDURE SplitValuesIntoColumns ( delim_str VARCHAR(1000) )
BEGIN
DECLARE i INT;
SET i = 0;
WHILE (i <= 2) DO
SET i = i + 1;
SET @rval = concat(@rval,SPLIT_STR (delim_str, '*', 1));
END WHILE;
SELECT @rval;
END; //
DELIMITER ;
任何帮助表示赞赏。这似乎冗长,所以如果有更好的方法来实现这一点,请加入。
【问题讨论】:
标签: mysql sql stored-procedures