分割字符串为数组需要用到 三个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,获得所有以“某个符号“分割的字符串的个数,函数内容如下

(将sql代码复制放在navicat中执行即可)

DELIMITER $$

CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string_total`(

f_string varchar(1000),f_delimiter varchar(5)

) 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的函数

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。

存储过程和函数存在以下几个区别:

1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。

2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。

3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。

4)存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文章:MySQL 字符串截取相关函数小结

MySQL 截取字符串函数的sql语句

mysql基于正则实现模糊替换字符串的方法分析

mysql字符串拼接并设置null值的实例方法

mysql通过函数分割字符串为数组中_Mysql通过存储过程分割字符串为数组相关推荐

  1. java---编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得。

    题目: 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数组为: d[0][0]=1 d[0][1]=2 ...

  2. 求行指针所指的字符串数组中长度最长的字符串所在的行下标

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p137 习题5 3.行指针ss所指字符串数组中共有M个字符串,且字符串长度<N.求ss所指字符串 ...

  3. 数组元素数组中的元素通过解析字符串参数获得

    返回数组,数组元素数组中的元素通过解析字符串参数获得 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数 ...

  4. 2053. 数组中第 K 个独一无二的字符串

    2053. 数组中第 K 个独一无二的字符串 独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串. 给你一个字符串数组 arr 和一个整数 k ,请你返回 arr 中第 k 个 独一无二的字 ...

  5. Leetcode——2053. 数组中第 K 个独一无二的字符串

    数组中第 K 个独一无二的字符串 题目 解题思路 题目 独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串. 给你一个字符串数组 arr 和一个整数 k ,请你返回 arr 中第 k 个 独 ...

  6. php 去除二维数组中的包含某一个值的数组

    今天写程序,遇到一个的问题. 我想把一个二维数组中的包含某一个值的数组去掉,并重新生成索引下标 例如: $all_zone=array(array("id"=>"R ...

  7. Java黑皮书课后题第8章:*8.27(列排序)用下面的方法实现一个二维数组中的列排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.27(列排序)用下面的方法实现一个二维数组中的列排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  8. Java黑皮书课后题第8章:*8.26(行排序)用下面的方法实现一个二维数组中的行排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.26(行排序)用下面的方法实现一个二维数组中的行排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  9. JavaScript求数组中每个元素的个数,如数组str = [1,2,3,2,4,1,2]中元素2的个数为2。要求:使用对象知识来实现,输出结果为对象,对象包含数组元素和个数值。

    求数组中每个元素的个数,如数组str = [1,2,3,2,4,1,2]中元素2的个数为2. 要求:使用对象知识来实现,输出结果为对象,对象包含数组元素和个数值. <script>var ...

最新文章

  1. 它来了!无人车穿梭在深圳的“宇宙最强街道”
  2. python3安卓版下载-QPython3H安卓运行Python神器
  3. 《软件构架实践》7-9章读后感
  4. java 置顶_[置顶]java开发之基础篇2
  5. 没有bug队——加贝——Python 51,52
  6. 深度综述|基因与疾病关系研究的百年进展
  7. Spring Boot Initilizr - 使用Spring Boot CLI
  8. spark的python开发安装方式,最简单的方式来安装Python依赖关系的Spark执行器节点?...
  9. 【深度学习】你该会的精选面试题(一)
  10. 动图GIF图片怎么制作?教你一键搞定
  11. 安卓ps2模拟器_RetroArch 1.9.0 for windows/mac/ios/Android【全平台主机游戏模拟器】
  12. 一篇很透彻的关于跳槽的文章
  13. 南大通用GBase 8c斩获鲲鹏应用创新大赛2022全国总决赛金奖
  14. 闲的发慌系列01-家庭版NAS
  15. python实现模糊搜索_Python英文搜索引擎(模糊搜索)
  16. IRIG-B码在FC-AE协议中的应用
  17. linux 安装lrzsz实现 XShell 上传下载 命令 rz、sz
  18. html5设置不缓存页面,页面的缓存与不缓存设置
  19. 又一位网友中了Viking Trojan PSW OnLineGames abo Trojan PSW SBoy b等
  20. ffmpeg录音及搭建在线广播

热门文章

  1. js删除字符串最后一个字符方法总汇
  2. 最大子数组和——动态规划法
  3. cloudsim中时间共享调度策略和空间共享调度策略
  4. CloudSim资源调度
  5. 豪言开设10万+门店,正新鸡排如何跑这么快?
  6. 南京航天航空大学计算机推免,南京航空航天大学2017计算机科学与技术拟录取推免生名单...
  7. kotlin lambda之 “带接受者的lambda”
  8. 爬取UP主指法芬芳张大仙视频评论及回复
  9. 汽车智能化进入赛点:城市NOA落地竞速,战至最后一公里
  10. vue字符串逗号切割并换行弹框展示