逗号将字符串分隔为MySql中的表

时间:2018-04-15 08:44:34

标签: mysql string

我正在尝试使用MySql将逗号分隔的字符串转换为表结果。基本上,我是一个SQL Server用户,我不知道如何在MySql中实现相同的功能。请帮帮我。

我有如下所示的刺痛,基本上字符串数组包含不同的值。

'45,55,65,41'

我想将此转换为表格结果,如下所示

+---------+-----------------+
|     id    |  value        |
+---------+-----------------+
|     1     |     45        |
+---------+-----------------+
|     2     |     55        |
+---------+-----------------+
|     3     |     65        |
+---------+-----------------+
|     4     |     41        |
+---------+-----------------+

何你这样做?

2 个答案:

答案 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