MySQL数据库中,将一个字段的值分割成多条数据显示

 

本文主要记录如何在MySQL数据库中,将一个字符串分割成多条数据显示。

外键有时是以字符串的形式存储,例如 12,13,14 这种,如果以这种形式存储,则不能直接与其他表关联查询,此时就需要将该字段的值分割再关联查询。

下图是一条测试数据,表名为 test 

 

想达到的效果如下图所示

为实现功能,需要新建一个表,该表只有一个字段,字段命名为id,表名称为 sequence 

表中需要预先置入一些值,主要是便于分割判断,一般该数值取决于要分割字符串的长度,但长度 100 应该是够了。

下面分享两种可以实现效果的 SQL ,这两个SQL的最主要区别就是对 sequence 中值的要求。

 

第一种对 sequence 表的要求就是值要从 0 开始。

SELECT
    t.id,
    SUBSTRING_INDEX(
        SUBSTRING_INDEX(t. DATA, ',', s.id + 1),
        ',' ,- 1
    ) AS DATA
FROM
    test t
JOIN sequence s ON s.id < (
    LENGTH(t. DATA) - LENGTH(REPLACE(t. DATA, ',', '')) + 1
)

值从0开始的结果

 

值从1开始的结果

 

第二种对 sequence 表的要求就是值要从 1 开始

SELECT
    t.id,
    REPLACE (
        SUBSTRING_INDEX(DATA, ',', s.id),
        CONCAT(
            SUBSTRING_INDEX(DATA, ',', s.id - 1),
            ','
        ),
        ''
    ) AS DATA
FROM
    sequence s
CROSS JOIN (
    SELECT
        id,
        CONCAT(DATA, ',') AS DATA,
        LENGTH(DATA) - LENGTH(REPLACE(DATA, ',', '')) + 1 AS dataSize
    FROM
        test
) t ON s.id <= t.dataSize

 

值从1开始的结果

 

值从 0 开始的结果

 

 希望对看到这篇文章的你有所帮助。

posted @ 2018-08-08 23:06  ____Peanut  阅读(5883)  评论(0编辑  收藏  举报