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函数,将逗号替换成换行符。