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 开始的结果
希望对看到这篇文章的你有所帮助。