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

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

  • 相关阅读:
    软件工程讲义 3 两人合作(2) 要会做汉堡包
    创新 王屋村的魔方们
    IT 行业的创新 创新的迷思 (56)
    现代软件工程讲义 12 绩效管理
    校园招聘 比较容易的面试题
    技能的反面 魔方和模仿
    现代软件工程讲义 2 工程师的能力评估和发展
    计算机知识体系的三个部分
    不鸣则已 一鸣惊人
    京城名流的聚会
  • 原文地址:https://www.cnblogs.com/hs2018/p/9446248.html
Copyright © 2011-2022 走看看