MySQL中列如何以逗号分隔转成多行

1. MySQL中列如何以逗号分隔转成多行

在MySQL中,有时候我们需要将一列中以逗号分隔的值,转换成多行进行展示或处理。比如下面这个表,列fruit中的值以逗号分隔。

+----+------------------+

| id | fruit |

+----+------------------+

| 1 | apple,banana,pear|

| 2 | orange,grape |

+----+------------------+

如果我们想将每个水果都拆分成一行,那么该怎么办呢?这里提供两种方法,一种是使用MySQL内置函数实现,另一种是使用正则表达式。

1.1 使用MySQL内置函数

MySQL中内置了一些常用字符串处理函数,如SUBSTR、CONCAT、TRIM等。其中,SUBSTRING_INDEX可以以指定的分隔符为标志,将字符串拆分成多个部分。我们可以利用这个函数将逗号分隔的水果拆分开来,然后再将结果进行UNION操作,实现拆分成多行的效果。

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(fruit, ',', nums.n), ',', -1) AS fruit

FROM my_table

JOIN

(

SELECT 1 n UNION ALL

SELECT 2 UNION ALL

SELECT 3

) nums

ON CHAR_LENGTH(fruit)

-CHAR_LENGTH(REPLACE(fruit, ',', ''))>=nums.n-1;

上述代码中,我们使用了JOIN子句连接了一个子查询,其中该子查询返回了一个包含数字1、2、3的表。然后我们在主查询中获取每个fruit字段以逗号分隔后的n个部分,其中n来自子查询,由此实现拆分成多行的效果。

1.2 使用正则表达式

如果使用正则表达式来解决上面的问题,可以使用REGEXP_REPLACE函数,用正则表达式将逗号替换成换行符。具体实现如下:

SELECT REGEXP_REPLACE(fruit, ',', '\n') AS fruit

FROM my_table;

上述代码中,我们应用了REGEXP_REPLACE函数,将逗号替换成换行符。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签