MySQL 自定义 split 存储过程

这篇具有很好参考价值的文章主要介绍了MySQL 自定义 split 存储过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        MySQL 没有提供 split 函数,但可以自己建立一个存储过程,将具有固定分隔符的字符串转成多行。之所以不能使用自定义函数实现此功能,是因为 MySQL 的自定义函数自能返回标量值,不能返回多行结果集。

MySQL 8:

drop procedure if exists sp_split;
delimiter //
create procedure sp_split(p_str text, p_delimiter varchar(100))
begin
    select substring_index(substring_index(p_str, p_delimiter, lv), p_delimiter, - 1) a
      from (
	  with recursive tab1(lv) as (
           select 1 lv 
            union all
           select t1.lv + 1 from tab1 t1 
            where lv < (char_length(p_str) - char_length(replace(p_str, p_delimiter, ''))) / (char_length(p_delimiter)) + 1)
      select * from tab1
      ) t1;
end;
//
delimiter ;

MySQL 5:

drop procedure if exists sp_split;
delimiter //
create procedure sp_split(p_str text, p_delimiter varchar(100))
begin
    select substring_index(substring_index(p_str, p_delimiter, help_topic_id + 1), p_delimiter, - 1) a
      from mysql.help_topic  
     where help_topic_id < (char_length(p_str) - char_length(replace(p_str, p_delimiter, ''))) / (char_length(p_delimiter)) + 1;
end;
//
delimiter ;

测试:

mysql> set @a:='123,456,789';
Query OK, 0 rows affected (0.00 sec)

mysql> call sp_split(@a,',');
+------+
| a    |
+------+
| 123  |
| 456  |
| 789  |
+------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> set @a:='中;;English;;混杂;;多字符分隔符';
Query OK, 0 rows affected (0.00 sec)

mysql> call sp_split(@a,';;');
+--------------------+
| a                  |
+--------------------+
| 中                 |
| English            |
| 混杂               |
| 多字符分隔符        |
+--------------------+
4 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

返回指定下标的元素:文章来源地址https://www.toymoban.com/news/detail-670847.html

set collation_database=utf8mb4_0900_ai_ci;
set collation_server=utf8mb4_0900_ai_ci;

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 ;




# 调用
mysql> set @s:='123|345|789';
Query OK, 0 rows affected (0.00 sec)

mysql> select fn_split(@s,'|',1) i1, fn_split(@s,'|',2) i2, fn_split(@s,'|',3) i3;
+------+------+------+
| i1   | i2   | i3   |
+------+------+------+
| 123  | 345  | 789  |
+------+------+------+
1 row in set (0.00 sec)

到了这里,关于MySQL 自定义 split 存储过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库中的存储过程以及存储函数练习

     字段名       数据类型       主键    外键    非空   唯一    自增       id             INT               是      否       是       是           否    name    VARCHAR(50)   否      否       是       否           否    glass   VARCHAR(50)     否   

    2024年02月15日
    浏览(33)
  • Mysql数据库实验报告--实验五 存储过程和触发器

    在这个系列会更新一些最近老师要求写的实验报告~ 大家尽量对着我的文章做一个参考,不要盲目的cv,毕竟这个对于我们以后的工作学习还是十分重要的。 从这个实验开始,就不在cmd命令行里面进行mysql数据库的操作,因为代码长度和代码的复杂性,需使用 MySQL Workbench: 双

    2024年02月09日
    浏览(41)
  • 使用MySQL存储过程提高数据库效率和可维护性

    MySQL 存储过程是一种强大的数据库功能,它允许你在数据库中存储和执行一组SQL语句,类似于编程中的函数。存储过程可以大幅提高数据库的性能、安全性和可维护性。本文将详细介绍MySQL存储过程的使用。 MySQL存储过程是一组预编译的SQL语句,它们以一个名称存储在数据库

    2024年02月08日
    浏览(35)
  • 【Mysql】X-DOC:Mysql数据库大量数据查询加速(定时JOB和存储过程应用案例)

    在某中台系统中,设计了大量的基础数据(维度数据、维度映射关系等)来支撑业务功能,业务表中存在大量的维度外键关联字段,其优点是可以实现前端的选择录入,数据校验,确保录入数据的准确性;缺点是在做业务报表时,需要做大量的维度关联(join)操作。 受限于

    2024年02月12日
    浏览(32)
  • 【MySQL】探索MySQL存储过程的魔力,初学者的数据库编程秘笈(内含实战SQL脚本)

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:重温MySQL MySQL存储过程作为一种服务器端的 数据库编程方式 ,提供了高效、可重用的方法来执行相对复杂的数据库操

    2024年02月15日
    浏览(48)
  • MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)

    目录 介绍 特点 基本语法 创建 调用 查看 删除  示例  存储过程是 事先经过编译 并 存储在数据库 中的一段 SQL 语句的 集合 ,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想

    2024年02月06日
    浏览(46)
  • 数据库系统原理及MySQL应用教程实验七存储过程与函数的创建管理

    1. 理解存储过程和函数的概念。 2. 掌握创建存储过程和函数的方法。 3. 掌握执行存储过程和函数的方法。 4. 掌握游标的定义、使用方法。 1.验证性实验:某超市的食品管理的数据库的Food表对其操作。 2.设计性试验:学校教师管理数据库中的teacherInfo表对其操作。 三、实验步

    2024年02月03日
    浏览(42)
  • 开源数据库MYSQL DBA运维实战 第一章 部署

    数据库管理系统  DBMS    SQL(RDS关系型数据库) DBA  工程师 DDL  数据库定义语言:数据库,表,视图,索引,存储过程,函数 DML  数据库操纵语言:插入数据insert,删除数据delete,更新数据update DQL  数据库查询语言:查询数据selete DCL  数据库控制语言:例如控制用户的访

    2024年02月21日
    浏览(45)
  • 开源数据库MYSQL DBA运维实战 第三章 备份

    丢/删 1.数据的一致性 2.服务的可用性 3.1物理备份/冷备份 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的mysql tar,cp,scp 拷贝数据,有点快,缺点服务停止 3.2逻辑备份/热备份 备份的是建表,建库,插入等操作所执行SQL语句(DDL,DML,D

    2024年02月21日
    浏览(85)
  • 开源数据库MYSQL DBA运维实战 第四章 集群

    mysql复制技术 集群目的 负载均衡:解决高并发 高可用HA:服务可用性 远程灾害:数据有效性 图示 类型 M M-S M-S-S... M-M M-M-S-S 原理图示 图示 概念 1.在主库上把数据更改 (DDL DML DCL) 记录到二进制日志 (BinaryLog) 中。 2.备库/0线程将主库上的日志复制到自己的中继日志 ( Relay Log) 中

    2024年02月21日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包