【问题标题】:MySQL split on semicolon in a column to form a new row for each splitMySQL 在一列中以分号拆分,为每个拆分形成一个新行
【发布时间】:2015-04-30 21:44:47
【问题描述】:

所以我得到了旧版 mysql 数据库,其数据如下所示:

   DATE     |     DATA
2015-04-27  | sample; sample2; sample3
2015-04-28  | sample1; sample4

我希望创建一个新表来存储这样的日期/数据对。

   DATE     |     DATA
2015-04-27  | sample
2015-04-27  | sample2
2015-04-27  | sample3
2015-04-28  | sample1
2015-04-28  | sample4

我尝试研究用户定义的拆分函数,但它们似乎都只想在一个字符上拆分并返回一个拆分实例。我需要保留所有实例以放入新表中。

所以使用这个:http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

我创建了拆分函数并尝试更改返回:

REPLACE(SUBSTRING(SUBSTRING_INDEX(list, ';'),
LENGTH(SUBSTRING_INDEX(list, ';', pos -1)) + 1),
delim, '')

但它需要第三个参数来指定要返回的实例。有没有办法从左列返回新行的所有实例?

【问题讨论】:

    标签: mysql split concat group-concat


    【解决方案1】:

    这里有一个想法......

    DROP TABLE IF EXISTS my_table;
    
    CREATE TABLE my_table 
    ( date DATE NOT NULL
    , data VARCHAR(100) NOT NULL
    );
    
    INSERT INTO my_table VALUES
    ('2015-04-27','sample; sample2; sample3'),
    ('2015-04-28','sample1; sample4');
    
    SELECT * FROM my_table;;
    +------------+--------------------------+
    | date       | data                     |
    +------------+--------------------------+
    | 2015-04-27 | sample; sample2; sample3 |
    | 2015-04-28 | sample1; sample4         |
    +------------+--------------------------+
    
    SELECT * FROM ints;
    +---+
    | i |
    +---+
    | 0 |
    | 1 |
    | 2 |
    | 3 |
    | 4 |
    | 5 |
    | 6 |
    | 7 |
    | 8 |
    | 9 |
    +---+
    
    SELECT DISTINCT date
                  , data
                  , TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(data,';',i+1),';',-1)) x 
               FROM ints
                  , my_table
              ORDER 
                 BY date,i;
    
    +------------+--------------------------+---------+
    | date       | data                     | x       |
    +------------+--------------------------+---------+
    | 2015-04-27 | sample; sample2; sample3 | sample  |
    | 2015-04-27 | sample; sample2; sample3 | sample2 |
    | 2015-04-27 | sample; sample2; sample3 | sample3 |
    | 2015-04-28 | sample1; sample4         | sample1 |
    | 2015-04-28 | sample1; sample4         | sample4 |
    +------------+--------------------------+---------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多