首页 > 数据库 >mysql字符串分割

mysql字符串分割

时间:2022-12-06 15:03:09浏览次数:43  
标签:INDEX 分割 CHAR SUBSTRING num str mysql 字符串 ###

mysql字符串分割

 

1、字符串分割函数

drop function if exists str_for_substr;
CREATE
    DEFINER = `root`@`%` FUNCTION `str_for_substr`(`num` int, `str` varchar(5000))
    RETURNS varchar(100) no sql
BEGIN
    /*函数功能: 把带逗号的字符串分割取出
        参数: num 要取出的字符串的索引值, 以0开始
                    str 以逗号分割的字符串
        扩展: 将###替换成其他符合,即可完成不同分隔符拆分字符串,亦可以把分隔符作为参数
  */
    SET @str_for_substr =
            SUBSTRING(
                    SUBSTRING_INDEX(str, '###', num + 1),
                    CASE num
                        WHEN 0 THEN
                                CHAR_LENGTH(
                                        SUBSTRING_INDEX(str, '###', num)
                                    ) + 1
                        ELSE
                                CHAR_LENGTH(
                                        SUBSTRING_INDEX(str, '###', num)
                                    ) + 4
                        END,
                    CASE num
                        WHEN 0 THEN
                                CHAR_LENGTH(
                                        SUBSTRING_INDEX(str, '###', num + 1)
                                    ) - CHAR_LENGTH(
                                        SUBSTRING_INDEX(str, '###', num)
                                    )
                        ELSE
                                CHAR_LENGTH(
                                        SUBSTRING_INDEX(str, '###', num + 1)
                                    ) - CHAR_LENGTH(
                                        SUBSTRING_INDEX(str, '###', num)
                                    ) - 1
                        END
                );


    RETURN @str_for_substr;
END;

 

2、创建存储过程,循环插入截取的每一条数据

drop procedure if exists split_str;
CREATE
    DEFINER = `root`@`%` PROCEDURE `split_str`()

BEGIN

    DECLARE cnt int default 0;
    DECLARE num int default 0;
    DECLARE i int default 0;
    DECLARE j int default 0;
    declare str varchar(4000);

#   统计当前截取字段表的数据量
    select count(1) into cnt from test;
#   循环查询每一条数据,此处可以换成游标处理
    while i<= cnt do
        select query_knowledge_list_string into str from test limit i,1;
#       查询每条数据###出现的次数
        SET num = (LENGTH(str) - LENGTH(REPLACE(str, '###', ''))) / 3;
        while j <= num do
#               循环插入截取后的数据
                INSERT INTO test1 (knowledge_name, subject_name, grade_name)
                select str_for_substr(j,str), subjectName, grade_name
                from test limit i,1;
            set j = j + 1;
            end while;
#       循环值归零
        set j = 0;
        set i = i + 1;
        end while;


END;

 

标签:INDEX,分割,CHAR,SUBSTRING,num,str,mysql,字符串,###
From: https://www.cnblogs.com/zuouncle/p/16955246.html

相关文章

  • mysqldump备份命令使用参数
    参数参数说明导出全部数据库。mysqldump-uroot-p--all-databases导出全部表空间。mysqldump-uroot-p--all-databases--all-tablespaces不导出任何表空间......
  • MySQL的数据表(DDL)操作
    表(Table)是数据库存储数据的主要形式,由行(Row)和列(Column)组成,类似于常见的电子表格。MySQL中的表与其他数据库的最大区别在于它们可以使用不同的存储引擎(StorageEngine)。......
  • 【python】字符串、转义字符、字符串常用方法
    1.字符串字符串用单引号或双引号包围起来,三个双引号或三个单引号开头的字符串可以换行。s1='hello,world's2="hello,world"s3='''hello,money,rice'''s3=......
  • mysql两种索引结构应用场景
    B-tree索引和Hash索引区别B+tree:B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接。在B+树上的常规检索,从根节点......
  • MySQL忽略大小写的注意事项
    一、背景在阿里的规范中,不允许超过2个JOIN的关联查询,故项目中需要将复杂SQL拆分二、问题目前MySQL5.7非特殊场景默认选择utf8mb4,排序选择utf8mb4_general_ci,MySQL8默认选择u......
  • mysql:数据量过多时使用索引覆盖
    1.什么是索引?索引(在MySQL中也叫“键key”)是存储引擎快速找到记录的一种数据结构,通俗来说类似书本的目录,这个比方虽然被用的最多但是也是最恰如其当的,在查询书本中的......
  • flink sql 程序消费kafka数据到mysql设置参数connector.url问题汇总
    1.问题现象:使用flinksql程序消费kafka数据写入mysql时,使用TVF表值函数,START_ENENT_TIME和END_ENENT_TIME始终比消费时间小大约13小时。解决办法在写入mysql的sink......
  • MySql的运行(Windows环境)
    MySql的运行(Windows环境)MySql数据库是免费、开源的关系型数据库一、MySql的下载mysql-5.7win64下载地址:https://downloads.mysql.com/archives/community/注意:这里......
  • 字符串转换为java.sql.Date格式的时间
    @Test  publicvoidtest()throwsParseException{    //将字符串转换为java.sql.Date格式的时间    Stringstr="2017-8-16";    Simpl......
  • 字符串中不同整数的数目
    题目给你一个字符串word,该字符串由数字和小写英文字母组成。请你用空格替换每个不是数字的字符。例如,"a123bc34d8ef34"将会变成"123 348 34"。注意,剩下的这些......