zoukankan      html  css  js  c++  java
  • MySql里split函数的实现

    最近在做公司的狐小E项目(https://www.hixiaoe.com/),要转Mysql数据库,但是Mysql 数据库自己是没有split函数,就在stackoverflow上搜了一个实现,这里也继续分享出去,取之于网络,用之于网格,大家一起学习,进步。

    以下就函数的具体实现。

    DROP FUNCTION IF EXISTS fn_split;
    
    DELIMITER $$
    
    CREATE FUNCTION  fn_split ( s TEXT , del CHAR(1) , i INT)
    RETURNS VARCHAR(1024)
    DETERMINISTIC -- always returns same results for same input parameters
    SQL SECURITY INVOKER 
    BEGIN
        DECLARE n INT ;
        -- get max number of items
        SET n = LENGTH(s) - LENGTH(REPLACE(s, del, '')) + 1;
        IF i > n THEN
            RETURN NULL ;
        ELSE
            RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(s, del, i) , del , -1 ) ;
        END IF;
    END$$
    
    DELIMITER ;

    建好了函数,我们看一下效果。

    下面是使用的结果。

    再来看一下,我们把i这个参数换成一个不超出范围的值会怎么样

            到这里,基础的split就已经实现了。如果没有复杂需求的,看到这里就可以了。

    在实际使用中,咱们可能会有不同的需求,比如要求你把一个字符串,用split处理成一个表返回,这种情况,我们又不知道字符串里的分割符有多少个。我相信很多人会选择先取出分隔符的数据,再循环来取的方式来处理。虽然这样能取出结果,但是我感觉还是麻烦了一些。下面是我的方法。

    我在库里建了一张表(t_split)

    在这里,需要说明一下,t_split表中name列,也可以建成int型的。

    在表里灌了一些数据(根据我项目的情况,我这里灌了1000条),下面截图只显示了部分数据。

    看到t_split表中的数据,你是不是能理解name列,为什么也可以建成int型的么?

    继续看这个表的使用,有了这张表,我们用split函数就方便了。下面就是使用效果

    如果name列是int型的,那么 上面的语句里的id列就可以替换成那么列了。为什么要用name列呢,最后告诉大家。

    有了t_split这张表(需要初始化数据),我们就不需要关心要分割的字符串里有多少个分隔符。这样用起来就方便多了。

    但是如果你的串里要超过1000个分隔符,t_split里的数据就要灌多些。

    这种使用的方法需要注意几个点。t_split表主键要有自增设置,生成的ID要从1开始连续断。如果你的MySql要做主从复制,那请在做主从复制前,把这个表里的数据先生成好,否则做好主从复制后,主键ID是主机上,和备机上都是跳号生成,这样再用t_split配合split函数取据就会漏数据了,大家一定要注意。

    如果你建t_split表的时候,把name列建成了int型的,灌数据的时候 name列里的值也是从1到N连续不段的,那么就不用担心Mysql主从复制的时候自增ID不连续的问题

    很高兴能够参加狐小E项目(https://www.hixiaoe.com/)的开发,期望在这个项目里能更快的成长起来,学习到更多Mysql的知识,也希望各位多多指点。

    如果大家有更好的方法,欢迎一起讨论,一起成长吧~

  • 相关阅读:
    CocoaPods的基本使用方法
    【STM32】电能表抄表功能实现|自学笔记
    【STM32】串口收发驱动Drv_Uart|学习笔记
    【STM32】SYSCLK配置|学习笔记
    【stm32】的PWM外设|学习笔记
    【JavaScript】setAttribute在添加事件时失效解决办法
    三步建立自己域名的主页,Github Pages功能简明手册
    Java生成UUID 与 MySQL数据库如何生成uuid数据
    利用Excel办公软件快速拼接SQL
    Java实现几种常见排序方法
  • 原文地址:https://www.cnblogs.com/wuweimin999/p/13218988.html
Copyright © 2011-2022 走看看