zoukankan      html  css  js  c++  java
  • 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 开始的结果

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

  • 相关阅读:
    16/3/16 实验回顾总结
    学习进度条
    实验一 命令解释程序的编写
    了解和熟悉操作系统
    0302思考并回答一些问题
    一个礼拜开发出一个栏目(总结/反思)
    如何获取继承中泛型T的类型
    用js判断页面是否加载完成
    读取文件之<绝对路径>与<相对路径>
    JSON--List集合转换成JSON对象
  • 原文地址:https://www.cnblogs.com/hs2018/p/9446248.html
Copyright © 2011-2022 走看看