zoukankan      html  css  js  c++  java
  • 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,'')))/3;
    END$$
    DELIMITER ;
    

    这边的除以3表示切割的字符串的长度,计算根据指定字符串进行切割后的个数,就是求需要切割的个数加一即可.我这边测试切割的是’|||’,如果是逗号就将3改为1即可.
    然后就可以呢看见函数:
    在这里插入图片描述
    2. 按分割取出字符串

    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 ;
    
    1. 然后再写一个存储过程进行组合使用这两个函数,输入需要分割的字符串 ,和分隔符,输出 按某某符号分割后的数组,插入临时表
    DELIMITER $$
    CREATE PROCEDURE `sp_print_result`(
     IN f_string varchar(1000),IN f_delimiter varchar(100)
    )
    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 VARCHAR(110));
     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 ;
    

    临时表我使用varchar,原作者是使用的int.可以进行修改.

    可能执行的时候会报错:The user specified as a definer (‘root’@’%’) does not exist
    执行 :grant all privileges on . to root@"%" identified by “.”;
    执行 :flush privileges;

    然后测试我自己的:

    call sp_print_result('www.111.com|||www.111.com|||www.111.com|||www.222.com|||www.3333.com|||www.baiddsfu3.com|||www.4444.com|||www.5555.com','|||');
    
    

    执行结果:
    在这里插入图片描述
    转,部分修改增强:https://www.jb51.net/article/158443.htm

    世界上所有的不公平都是由于当事人能力不足造成的.
  • 相关阅读:
    C# 重载,重写,代理,枚举实例
    关于C#7 新语法糖
    关于C# 异步
    经验
    C# 后台模块 Word 模板操作
    .Net 图片生成水印
    .Net XML操作
    .Net web 关于表单标题
    分页存储过程
    python 爬虫 猫眼视频榜单top100
  • 原文地址:https://www.cnblogs.com/javayida/p/13346900.html
Copyright © 2011-2022 走看看