mysql 将按指定符号将一行拆分成多行
时间: 2023-11-28 15:49:00 浏览: 73
MySQL不会自动将一行拆分成多行,但可以使用字符串函数将一行拆分成多行。例如,可以使用`SUBSTRING_INDEX`函数来按指定符号将一行拆分成多行,如下所示:
```
SELECT SUBSTRING_INDEX('a,b,c,d', ',', 1) AS col1,
SUBSTRING_INDEX(SUBSTRING_INDEX('a,b,c,d', ',', 2), ',', -1) AS col2,
SUBSTRING_INDEX(SUBSTRING_INDEX('a,b,c,d', ',', 3), ',', -1) AS col3,
SUBSTRING_INDEX(SUBSTRING_INDEX('a,b,c,d', ',', 4), ',', -1) AS col4;
```
这将返回以下结果:
```
+------+------+------+------+
| col1 | col2 | col3 | col4 |
+------+------+------+------+
| a | b | c | d |
+------+------+------+------+
```
在上面的查询中,我们使用了`SUBSTRING_INDEX`函数来从字符串中获取特定位置的子字符串,并在逗号处分割了字符串。
相关问题
MySQL 将按指定符号将一行拆分成多行
MySQL不会自动将一行拆分成多行,但可以使用字符串函数将一行拆分成多行。例如,可以使用`SUBSTRING_INDEX`函数来按指定符号将一行拆分成多行,如下所示:
```
SELECT SUBSTRING_INDEX('a,b,c,d', ',', 1) AS col1,
SUBSTRING_INDEX(SUBSTRING_INDEX('a,b,c,d', ',', 2), ',', -1) AS col2,
SUBSTRING_INDEX(SUBSTRING_INDEX('a,b,c,d', ',', 3), ',', -1) AS col3,
SUBSTRING_INDEX(SUBSTRING_INDEX('a,b,c,d', ',', 4), ',', -1) AS col4;
```
这将返回以下结果:
```
+------+------+------+------+
| col1 | col2 | col3 | col4 |
+------+------+------+------+
| a | b | c | d |
+------+------+------+------+
```
在上面的查询中,我们使用了`SUBSTRING_INDEX`函数来从字符串中获取特定位置的子字符串,并在逗号处分割了字符串。
MySQL 按指定分隔符号将某列拆分成多行
可以使用 MySQL 中的 SUBSTRING_INDEX 函数来实现按指定分隔符将某列拆分成多行。具体做法如下:
1. 使用 SELECT 语句查询需要拆分的列,同时使用 GROUP_CONCAT 函数将每一行的值以逗号分隔的形式合并为一个字符串:
```
SELECT GROUP_CONCAT(column_name SEPARATOR ',') AS concat_str FROM table_name;
```
2. 使用 SUBSTRING_INDEX 函数将合并后的字符串按指定分隔符拆分成多行:
```
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(concat_str, ',', nums.n), ',', -1) AS column_name FROM table_name CROSS JOIN (SELECT 1 + units.i + tens.i * 10 AS n FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS units CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS tens) AS nums WHERE nums.n <= 1 + LENGTH(concat_str) - LENGTH(REPLACE(concat_str, ',', ''));
```
其中,nums 表是一个包含 100 行的表,用于拆分字符串时生成行号。如果需要拆分的字符串超过 100 个,可以将 nums 表中的行数扩展到更大的数值。
以上是将某列按逗号拆分为多行的示例,如果需要按其他分隔符拆分,只需将上述语句中的逗号替换为其他符号即可。
阅读全文