Mysql通过存储过程分割字符串为数组
分割字符串为数组需要⽤到三个mysql 的函数:
REVERSE(str) 返回颠倒字符顺序的字符串str。
SUBSTRING_INDEX(str,delim,count)
返回从字符串str的第count个出现的分隔符delim之后的⼦串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。
REPLACE(str,from_str,to_str)
返回字符串str,其字符串from_str的所有出现由字符串to_str代替。
通过三个函数的组合使⽤做到分割字符串为数组的功能。
⾸先写两个函数
1,获得所有以“某个符号“分割的字符串的个数,函数内容如下
javabean概念特点(将sql代码复制放在navicat中执⾏即可)
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string_total`(
f_string varchar(1000),f_delimiter varchar(5)
debugging tools
) RETURNS int(11)
BEGIN
-- Get the total number of given string.
return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
END$$
DELIMITER ;
2、按分割取出字符串
(将sql代码复制放在navicat中执⾏即可)
原码计算过程DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string`(
f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
BEGIN
-- Get the separated number of given string.
declare result varchar(255) default '';
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
return result;
END$$
DELIMITER ;
然后再写⼀个存储过程进⾏组合使⽤这两个函数,输⼊需要分割的字符串,和分隔符,输出按某某符号分割后的数组
(将sql代码复制放在navicat中执⾏即可)
DELIMITER $$
CREATE PROCEDURE `sp_print_result`(
IN f_string varchar(1000),IN f_delimiter varchar(5)
)
BEGIN
-- Get the separated string.
declare cnt int default 0;
declare i int default 0;
set cnt = func_get_split_string_total(f_string,f_delimiter);
drop table if exists tmp_print;
create temporary table tmp_print (num int not null);
while i < cnt
do
set i = i + 1;
insert into tmp_print(num) values (func_get_split_string(f_string,f_delimiter,i));
end while;
select * from tmp_print;
END$$
DELIMITER ;
然后输⼊字符串进⾏测试。
call sp_print_result(“434,123,12,234,123,123”,”,”);
结果如下图
可能执⾏的时候会报错:The user specified as a definer (‘root'@'%') does not exist
解决⽅法如下:
执⾏:grant all privileges on *.* to root@"%" identified by ".";
执⾏:flush privileges;mysql查看所有存储过程
就解决了这个问题。
最后说⼀下存储过程和mysql的函数
存储过程是⽤户定义的⼀系列sql语句的集合,涉及特定表或其它对象的任务,⽤户可以调⽤存储过程,⽽函数通常是数据库已定义的⽅法,它接收参数并返回某种类型的值并且不涉及特定⽤户表。
存储过程和函数存在以下⼏个区别:
易语言593破解版1)⼀般来说,存储过程实现的功能要复杂⼀点,⽽函数的实现的功能针对性⽐较强。存储过程,功能强⼤,可以执⾏包括修改表等⼀系列数据库操作;⽤户定义函数不能⽤于执⾏⼀组修改全局数据库状态的操作。
2)对于存储过程来说可以返回参数,如记录集,⽽函数只能返回值或者表对象。函数只能返回⼀个变量;⽽存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,⽽函数只能有IN类~~存储过程声明时不需要返回类型,⽽函数声明时需要描述返回类型,且函数体中必须包含⼀个有效的RETURN语句。
3)存储过程,可以使⽤⾮确定函数,不允许在⽤户定义函数主体中内置⾮确定函数。
ofd格式4)存储过程⼀般是作为⼀个独⽴的部分来执⾏( EXECUTE 语句执⾏),⽽函数可以作为查询语句的⼀个部分来调⽤(SELECT调⽤),由于函数可以返回⼀个表对象,因此它可以在查询语句中位于FROM关键字的后⾯。 SQL语句中不可⽤存储过程,⽽可以使⽤函数。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。如果你想了解更多相关内容请查看下⾯相关链接

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。