• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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,获得所有以“某个符号“分割的字符串的个数,函数内容如下

    (将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截取和拆分字符串函数用法示例
    • MySQL 字符串拆分操作(含分隔符的字符串截取)
    上一篇:MySQL数据库中CAST与CONVERT函数实现类型转换的讲解
    下一篇:mysql索引基数概念与用法示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Mysql通过存储过程分割字符串为数组 Mysql,通过,存储,过程,分割,