Split comma separated string into rows in mysql

前端 未结 3 1192
囚心锁ツ
囚心锁ツ 2020-12-06 02:38

When I have string list like 1, 2, 3... I\'d like to use this as one column

Ids
1
2
3

Is it possible by sql query?

ex) SELECT

相关标签:
3条回答
  • 2020-12-06 03:10

    You can use below stored procedure to split string delimted by any character:

    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
    

    Input: 'a,b,c' Output: a b c

    0 讨论(0)
  • 2020-12-06 03:13

    Use a subquery of arbitrary digits to split your string.Instead of vals you can use '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

    0 讨论(0)
  • 2020-12-06 03:20

    For MySQL 8.0.4+

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

    Concatenate square brackets ([]) around your string to make it into a JSON array. Then use JSON_TABLE to convert it into a table. See the MySQL JSON Table Functions for more info.

    0 讨论(0)
提交回复
热议问题