欢迎投稿

今日深度:

mysql字符串分割功能实现,

mysql字符串分割功能实现,


目录
  • mysql字符串分割
    • 1、字符串分割函数
    • 2、创建存储过程,循环插入截取的每一条数据
  • 扩展:mysql字段的分割截取功能(模拟split)

    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;

    扩展:mysql字段的分割截取功能(模拟split)

    大家好,又见面了。每次见面就说明我又解决了一个疑难杂症。今天这个问题更狠一些,又让我的sql能力有了进一步的提高。简单说我我最近为什么会有这么多的sql问题,主要原因就是我们从数据中台的hive库同步数据,而他们库里的数据实在是脏的过分,有各种你想象不到数据,而我们也推不动不了他们,没把办法就只能通过sql自己处理。

    接下来看看今天的奇葩问题。我们同步过来的数据内容如下。

    image.png

    最可怕就是在类型的前面多了一些数字加顿号。这些内容对于我来讲是完全没有意义的,我需要的只是顿号后面的内容。那么我应该怎么处理得到后面的内容呢。最先想到的是split. 但是后来查了一下,mysql居然不支持split函数。真是让我大失所望。后来只能去找相近的函数,发现有一个INSTR() 函数,可以用来判断时段中是否包含某个字符串 ,并返回包含字符串对应的索引。在结合SUBSTR函数进行截取,就可以完美解决这个问题了。

    同时还要注意,最好做下判断,只有当字段中包含这个字符串时才进行截取,不包含则不截取。最终得到的sql如下:

    select 
    year,
    case when INSTR(subtype,'、')>0 then SUBSTR(subtype,INSTR(subtype,'、')+1)
    else subtype END subtype
    from 
    xxx_table_name

    最终得到结果成功。

    image.png

    到此这篇关于mysql字符串分割的文章就介绍到这了,更多相关mysql字符串分割内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

    您可能感兴趣的文章:
    • Mysql将字符串按照指定字符分割的正确方法
    • MySql字符串拆分实现split功能(字段分割转列)
    • MySQL查询字段实现字符串分割split功能的示例代码
    • Mysql通过存储过程分割字符串为数组
    • MySQL里实现类似SPLIT的分割字符串的函数

    www.htsjk.Com true http://www.htsjk.com/Mysql/45797.html NewsArticle mysql字符串分割功能实现, 目录 mysql字符串分割 1、字符串分割函数 2、创建存储过程,循环插入截取的每一条数据 扩展:mysql字段的分割截取功能(模拟split) mysql字符串分割 1、字符串分...
    评论暂时关闭