mysql 记录用逗号分割的字符串,行转列
时间: 2023-11-23 17:21:55 浏览: 162
如果您有一列包含用逗号分隔的字符串,并且想将其转换为行列格式,可以使用 MySQL 的 SUBSTRING_INDEX 和 GROUP_CONCAT 函数来执行此操作。
下面是一个示例 SQL 查询语句:
```
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(column1, ',', n), ',', -1) AS value,
COUNT(*) AS count
FROM table1
CROSS JOIN (
SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
) m
WHERE n <= LENGTH(column1) - LENGTH(REPLACE(column1, ',', '')) + 1
GROUP BY value;
```
其中,table1 是要查询的表名,column1 是包含用逗号分隔的字符串的列名。在此示例中,我们使用了一个名为 m 的子查询,该子查询返回数字 1 至 4,用于拆分字符串。
该查询将返回一个数据集,其中每行包含一个唯一的值和该值出现的次数。您可以根据需要调整查询中的子查询部分以适应您的实际情况。
相关问题
mysql如何将查询到的字符串分割成若干条记录
你可以使用MySQL内置函数`SUBSTRING_INDEX()`和`UNION ALL`语句来将查询到的字符串分割成若干条记录。下面是一个示例:
假设你有一个名为`example`的表,其中有一个名为`string`的字段,它包含了多个以逗号分隔的值,如下所示:
| id | string |
|----|---------------|
| 1 | apple,banana |
| 2 | orange,grape |
你可以使用以下语句将每个字符串分割成单独的记录:
```sql
SELECT id, SUBSTRING_INDEX(string, ',', 1) AS value
FROM example
UNION ALL
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(string, ',', 2), ',', -1) AS value
FROM example
WHERE string LIKE '%,%'
UNION ALL
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(string, ',', 3), ',', -1) AS value
FROM example
WHERE string LIKE '%,%,%'
-- 继续添加类似上述子查询,直到分割的最大数量
ORDER BY id;
```
这将返回以下结果:
| id | value |
|----|--------|
| 1 | apple |
| 1 | banana |
| 2 | orange |
| 2 | grape |
该查询将`example`表中的每个字符串分成了单独的记录,并将其与其所属的原始记录ID一起返回。请注意,子查询中的`SUBSTRING_INDEX()`函数用于指定要分割的字符串中的分隔符和分割的数量。`UNION ALL`语句用于组合所有子查询的结果。
M0YSQL有一个字符串字段A,它用逗号分割并存储id,我该如何用手上有的id去查出含有这个id的A字段
你可以使用MySQL中的 FIND_IN_SET 函数来实现该功能。该函数的语法如下:
```
FIND_IN_SET(str, strlist)
```
其中 `str` 是要查找的字符串,`strlist` 是用逗号分隔的字符串列表。如果 `str` 在 `strlist` 中,则返回它在 `strlist` 中的位置;否则返回 0。
因此,你可以使用以下查询语句来查找包含特定 id 的记录:
```
SELECT * FROM your_table WHERE FIND_IN_SET('your_id', A) > 0;
```
其中 `your_table` 是你要查询的表名,`your_id` 是你要查找的 id 值,`A` 是包含 id 值的字段名。该查询语句将返回所有包含指定 id 值的记录。
阅读全文