将逗号分隔的字符串拆分为mysql中的行

时间:2017-07-05 07:32:44

标签: mysql sql

当我有1,2,3等字符串列表时...... 我想将其用作一栏

Ids
1
2
3

是否可以通过sql查询?

ex)SELECT Ids from (1, 2, 3...)< - 我知道这不起作用。

3 个答案:

答案 0 :(得分:7)

使用任意数字的子查询来分割你的字符串。而不是vals,你可以使用'1,2,3'。

SELECT
  DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(vals, ',', n.digit+1), ',', -1) val
FROM
  tt1
  INNER JOIN
  (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3  UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
  ON LENGTH(REPLACE(vals, ',' , '')) <= LENGTH(vals)-n.digit;

See it working

答案 1 :(得分:2)

对于MySQL 8.0.4 +

SELECT *
FROM
  JSON_TABLE(
          CONCAT('[', '1,2,3,4', ']'),
          "$[*]"
          COLUMNS(
              ids BIGINT(20) PATH "$"
              )
      ) AS tt

在字符串周围连接方括号([]),使其变成JSON数组。然后使用JSON_TABLE将其转换为表格。有关更多信息,请参见MySQL JSON Table Functions

答案 2 :(得分:0)

您可以使用下面的存储过程来分割由任何字符引起的字符串分离:

CREATE PROCEDURE `split_delimited` (
IN inputstr NVARCHAR(1000),
IN delimiter CHAR(1)
)
BEGIN
DROP TEMPORARY TABLE Items;
CREATE TEMPORARY TABLE Items(item NVARCHAR(50)); 
WHILE LOCATE(delimiter,inputstr) > 1 DO
INSERT INTO Items SELECT SUBSTRING_INDEX(inputstr,delimiter,1);
SET inputstr = REPLACE (inputstr, (SELECT LEFT(inputstr,LOCATE(delimiter,inputstr))),'');
END WHILE;
INSERT INTO Items(item) VALUES(inputstr);
select * from Items;
END

输入:“ a,b,c” 输出:a b c