-- 示例代码:使用 MySQL 的字符串函数来模拟 explode 功能
-- 假设我们有一个包含逗号分隔值的列,我们希望将其拆分成多行
-- 表结构如下:
-- CREATE TABLE example (id INT, tags VARCHAR(255));
-- 插入一些示例数据
INSERT INTO example (id, tags) VALUES
(1, 'tag1,tag2,tag3'),
(2, 'tag4,tag5');
-- 使用递归公用表表达式 (CTE) 来拆分字符串
WITH RECURSIVE split_tags AS (
-- 锚点成员:选择第一部分标签
SELECT id, SUBSTRING_INDEX(tags, ',', 1) AS tag,
SUBSTRING(tags, LENGTH(SUBSTRING_INDEX(tags, ',', 1)) + 2) AS remaining_tags
FROM example
UNION ALL
-- 递归成员:继续拆分剩余部分
SELECT id, SUBSTRING_INDEX(remaining_tags, ',', 1),
SUBSTRING(remaining_tags, LENGTH(SUBSTRING_INDEX(remaining_tags, ',', 1)) + 2)
FROM split_tags
WHERE remaining_tags != ''
)
SELECT id, tag
FROM split_tags;
-- 解释:
-- 1. `SUBSTRING_INDEX` 函数用于从字符串中提取指定分隔符之前的子字符串。
-- 2. 递归 CTE 通过不断分割字符串并处理剩余部分,直到没有更多的标签为止。
-- 3. 最终查询将返回每个 ID 对应的所有标签,每一行表示一个标签。
-- 注意:此方法适用于 MySQL 8.0 及以上版本,因为递归 CTE 是从 8.0 版本开始引入的。
上一篇:express mysql
下一篇:mysql json 解析
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站