MySQL 存储过程实现字符串 Split 分割方法
在 MySQL 中原生缺乏直接可用的数组或字符串分割函数,通过编写带有循环逻辑的存储过程可以灵活地拆分字符串。本方案利用临时表作为中间载体,完整实现了按指定分隔符提取子串并落库的操作。
执行效果预览
调用定义的存储过程后,系统会自动将输入字符串按照分隔符拆分为多行数据存入临时表 splittable。以下为典型的调用及查询输出:
call PROCEDURE_split('分享,代码,片段', ',');
select * from splittable;
核心操作步骤
第 1 步:删除旧有定义与准备环境
目的:确保脚本可重复执行,避免因重名导致报错。
操作:执行清理语句,如果存在名为 procedure_split 的过程则将其移除:
drop PROCEDURE if exists procedure_split;
第 2 步:创建存储过程主体
目的:初始化变量及中间表,为字符遍历做准备。
入口:进入 SQL 编辑器或命令行。
动作:定义参数并建立逻辑框架。其中声明了总长度 strlen、游标位置 cur_index 等关键变量,并清理/创建一个内存级别的临时表 splittable 用于暂存分割结果。表结构仅含一个 value VARCHAR(20) 字段:
CREATE PROCEDURE `procedure_split`(
inputstring varchar(1000),
delim char(1)
) begin
declare strlen int DEFAULT length(inputstring);
declare last_index int DEFAULT 0;
declare cur_index int DEFAULT 1;
declare cur_char VARCHAR(200);
declare len int;
drop temporary table if exists splittable;
create TEMPORARY table splittable(
value VARCHAR(20)
) ;
第 3 步:配置循环截取逻辑
目的:逐个扫描字符并在遇到分隔符时将当前段插入临时表。
重要参数:delim(分隔符)。此处硬编码假设分隔符为单字节字符。
动作:构建 WHILE 循环遍历整串。当发现当前字符等于分隔符且达到末尾时,计算该段落长度 len,并将子串 substring 插入表中:
WHILE(cur_index<=strlen) DO
begin
if substring(inputstring from cur_index for 1)=delim or cur_index=strlen then
set len=cur_index-last_index-1;
if cur_index=strlen then
set len=len+1;
end if;
insert into splittable(`value`)values(substring(inputstring from (last_index+1) for len));
set last_index=cur_index;
end if;
set cur_index=cur_index+1;
END;
end while;
end ;
完成判断
运行存储过程后,通过 SELECT * FROM splittable; 确认行数是否符合预期,即是否有对应的数据被准确切分录入。
简要总结
以上就是 MySQL 存储过程实现 split 的详细内容,更多关于 MySQL 基础用法及存储过程编写的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













