在数据库里将每条数据以逗号分隔的字段循环遍历出来
时间: 2024-02-03 16:13:59 浏览: 95
假设你的数据表名为 `my_table`,有一个字段名为 `my_field`,其中每个记录都是由逗号分隔的字符串。你可以使用 MySQL 中的 `SUBSTRING_INDEX()` 函数和 `LENGTH()` 函数来循环遍历每个字段。
具体来说,以下是一个示例查询语句,它将会遍历 `my_table` 表中的每个记录,将 `my_field` 字段中的每个以逗号分隔的值取出来:
```
SELECT
SUBSTRING_INDEX(
SUBSTRING_INDEX(my_field, ',', numbers.n),
',',
-1
) AS value
FROM
my_table
CROSS JOIN (
SELECT
a.N + b.N * 10 + 1 AS n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
CROSS JOIN (
SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) AS b
ORDER BY
n
) AS numbers
WHERE
numbers.n <= 1 + (LENGTH(my_field) - LENGTH(REPLACE(my_field, ',', ''))))
```
在这个查询语句中,我们使用了一个内部查询 `numbers`,它返回了一个从 1 到 N 的数字序列,其中 N 是最大的以逗号分隔值的数量。这个数字序列被用来逐个访问 `my_field` 中的每个分隔值。
在外部查询中,我们使用 `SUBSTRING_INDEX()` 函数来提取 `my_field` 中的每个分隔值。具体来说,我们使用 `SUBSTRING_INDEX(my_field, ',', numbers.n)` 来提取字符串中前 N 个以逗号分隔的值,然后再使用 `SUBSTRING_INDEX(..., ',', -1)` 来提取其中最后一个值。这样就可以逐个访问 `my_field` 中的每个值了。
最后,我们使用 `AS value` 来给每个分隔值取一个别名。你可以根据需要修改这个别名,以便更好地满足你的需求。
阅读全文