Разделенная запятыми строка в таблицу в MySql

0

Я пытаюсь преобразовать строку, разделенную запятой, в результат таблицы, используя MySql. В принципе, я пользователь SQL Server, и я не знаю, как добиться того же в MySql. Пожалуйста помоги мне с этим.

У меня есть жало, как показано ниже, в основном массив строк содержит разные значения.

'45,55,65,41'

Я хотел получить это преобразование в результат таблицы, как показано ниже

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

Хо сделать это?

  • 1
    Как вы делаете это на сервере SQL
Теги:
string

2 ответа

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

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;

Вы можете найти строку, разделенную запятыми, на 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню