Я пытаюсь преобразовать строку, разделенную запятой, в результат таблицы, используя MySql. В принципе, я пользователь SQL Server, и я не знаю, как добиться того же в MySql. Пожалуйста помоги мне с этим.
У меня есть жало, как показано ниже, в основном массив строк содержит разные значения.
'45,55,65,41'
Я хотел получить это преобразование в результат таблицы, как показано ниже
+---------+-----------------+
| id | value |
+---------+-----------------+
| 1 | 45 |
+---------+-----------------+
| 2 | 55 |
+---------+-----------------+
| 3 | 65 |
+---------+-----------------+
| 4 | 41 |
+---------+-----------------+
Хо сделать это?
Вы можете попробовать следующее.
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 |
+----+-------+
Вот решение:
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;
Вы можете найти строку, разделенную запятыми, на 5-й строке внутри функции REPLACE
: '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