mySQL将含逗号的字符串分成一个集合(行转列)
时间: 2024-01-14 11:05:21 浏览: 101
你可以使用MySQL内置的函数来实现将含逗号的字符串分成一个集合(行转列),例如使用`FIND_IN_SET`函数和`GROUP_CONCAT`函数的组合:
```sql
SELECT id, GROUP_CONCAT(name) AS names
FROM table_name
GROUP BY id;
```
其中,`id`是你的表中的唯一标识符列,`name`是你要分割的含逗号的字符串列。这条语句会将同一`id`的所有`name`字段的值合并成一个以逗号分隔的字符串,例如:
| id | names |
| --- | -------------- |
| 1 | A,B,C |
| 2 | D,E,F,G |
| 3 | H |
如果你想把这个集合中的值转成行,可以使用`SUBSTRING_INDEX`和`LENGTH`函数:
```sql
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(names, ',', n), ',', -1) AS name
FROM table_name
CROSS JOIN (
SELECT 1 n UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
) numbers
WHERE n <= 1 + LENGTH(names) - LENGTH(REPLACE(names, ',', ''));
```
其中,`numbers`是一个包含数字1到5的表,用来生成5行数据,`n`是这5行数据中的行号。这条语句会将每个`id`的所有`name`字段的值转成一行,例如:
| id | name |
| --- | ---- |
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | D |
| 2 | E |
| 2 | F |
| 2 | G |
| 3 | H |
请注意,由于这种方法使用了交叉连接,可能会导致性能问题,特别是当你的表中有大量数据时。如果你需要使用这种方法,请确保你的表中的数据量不会导致性能问题。
阅读全文