我正在尝试使用MySql将逗号分隔的字符串转换为表结果。基本上,我是一个SQL Server用户,我不知道如何在MySql中实现相同的功能。请帮帮我。
我有如下所示的刺痛,基本上字符串数组包含不同的值。
'45,55,65,41'
我想将此转换为表格结果,如下所示
+---------+-----------------+
| id | value |
+---------+-----------------+
| 1 | 45 |
+---------+-----------------+
| 2 | 55 |
+---------+-----------------+
| 3 | 65 |
+---------+-----------------+
| 4 | 41 |
+---------+-----------------+
何你这样做?
答案 0 :(得分:1)
您可以尝试以下内容。
select distinct
n as Id,
SUBSTRING_INDEX(SUBSTRING_INDEX('45,55,65,41', ',', numbers.n), ',', -1) Value
from
(select @rownum := @rownum + 1 as n
from YourTable
cross join (select @rownum := 0) r
) numbers
order by
n
<强>输出强>
+----+-------+
| ID | Value |
+----+-------+
| 1 | 45 |
+----+-------+
| 2 | 55 |
+----+-------+
| 3 | 65 |
+----+-------+
| 4 | 41 |
+----+-------+
<强> DEMO 强>
答案 1 :(得分:0)
这是一个解决方案:
DROP TEMPORARY TABLE if exists `converted_values`;
CREATE TEMPORARY TABLE `converted_values`( `id` int(11), `value` char(45) );
ALTER TABLE `converted_values` ADD PRIMARY KEY (`id`);
ALTER TABLE `converted_values` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
SET @sqlvar = CONCAT("INSERT INTO converted_values (value) VALUES ('", REPLACE('45,55,65,41', ",", "'),('"),"');");
PREPARE insert_statement FROM @sqlvar;
EXECUTE insert_statement;
SELECT * FROM converted_values;
您可以在REPLACE
函数的第5行找到以逗号分隔的字符串:'45,55,65,41'
。
以下是在线工作示例:https://www.db-fiddle.com/f/rvMDyc5JBnNQrDJ21rnRNX/1
<强>结果:强>
+----+-------+
| id | value |
+----+-------+
| 1 | 45 |
+----+-------+
| 2 | 55 |
+----+-------+
| 3 | 65 |
+----+-------+
| 4 | 41 |
+----+-------+
注意:这是一个临时表,不会保存到您的数据库中。当然,如果要将结果保存在数据库的表中,可以使用这部分代码:(并将表名converted_values
替换为表名)
SET @sqlvar = CONCAT("INSERT INTO converted_values (value) VALUES ('", REPLACE('45,55,65,41', ",", "'),('"),"');");
PREPARE insert_statement FROM @sqlvar;
EXECUTE insert_statement;
SELECT * FROM converted_values;
以下是一个在线示例:https://www.db-fiddle.com/f/rvMDyc5JBnNQrDJ21rnRNX/0