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 开始的结果

 

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

转载于:https://www.cnblogs.com/hs2018/p/9446248.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值