mysql split函数用逗号分隔的实现方法

2023-11-18

 

本文主要介绍了mysql split函数用逗号分隔的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1:定义存储过程,用于分隔字符串

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

DELIMITER $$

USE `mess`$$

DROP PROCEDURE IF EXISTS `splitString`$$

CREATE DEFINER=`root`@`%` PROCEDURE `splitString`(IN f_string VARCHAR(1000),IN f_delimiter VARCHAR(5))

BEGIN 

  DECLARE cnt INT DEFAULT 0; 

  DECLARE i INT DEFAULT 0; 

  SET cnt = func_get_splitStringTotal(f_string,f_delimiter); 

  DROP TABLE IF EXISTS `tmp_split`; 

  CREATE TEMPORARY TABLE `tmp_split` (`val_` VARCHAR(128) NOT NULL) DEFAULT CHARSET=utf8; 

  WHILE i < cnt 

  DO 

    SET i = i + 1; 

    INSERT INTO tmp_split(`val_`) VALUES (func_splitString(f_string,f_delimiter,i)); 

  END WHILE; 

END$$

DELIMITER ;

2:实现func_get_splitStringTotal函数:该函数用于计算分隔之后的长度,这里需要了解的函数:

1

2

3

4

5

6

REPLACE(str,from_str,to_str)

Returns the string str with all occurrences of the string from_str replaced by the string to_str. REPLACE() performs a case-sensitive match when searching for from_str.

例如:

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');

    -> 'WwWwWw.mysql.com'

具体实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

DELIMITER $$

USE `mess`$$

DROP FUNCTION IF EXISTS `func_get_splitStringTotal`$$

CREATE DEFINER=`root`@`%` FUNCTION `func_get_splitStringTotal`( 

f_string VARCHAR(10000),f_delimiter VARCHAR(50) 

) RETURNS INT(11)

BEGIN 

 RETURN 1+(LENGTH(f_string) - LENGTH(REPLACE(f_string,f_delimiter,''))); 

END$$

DELIMITER ;

3:实现func_splitString函数:用于获取分隔之后每次循环的值,这里需要了解的函数:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

(1)REVERSE(str)

Returns the string str with the order of the characters reversed.

例如:mysql> SELECT REVERSE('abc');

    -> 'cba'

(2)

SUBSTRING_INDEX(str,delim,count)

Returns the substring from string str before count occurrences of the delimiter delim. If count is positive, everything to the left of the final delimiter (counting from the left) is returned. If count is negative, everything to the right of the final delimiter (counting from the right) is returned. SUBSTRING_INDEX() performs a case-sensitive match when searching for delim.

例如:

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);

    -> 'www.mysql'

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);

    -> 'mysql.com'

具体实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

DELIMITER $$

USE `mess`$$

DROP FUNCTION IF EXISTS `func_splitString`$$

CREATE DEFINER=`root`@`%` FUNCTION `func_splitString`( f_string VARCHAR(1000),f_delimiter VARCHAR(5),f_order INT) RETURNS VARCHAR(255) CHARSET utf8

BEGIN 

  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)调用存储过程:

CALL splitString('1,3,5,7,9',',');

(2):查看临时表

SELECT val_ FROM tmp_split AS t1;

 结果:

到此这篇关于mysql split函数用逗号分隔的实现的文章就介绍到这了,希望可以帮到你。

 

来源:微点阅读   https://www.weidianyuedu.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql split函数用逗号分隔的实现方法 的相关文章

随机推荐

  • Qt 开发环境搭建

    Qt开发环境搭建 Qt下载 Qt安装 Windows平台 离线安装 在线安装 Qt安装目录 VS2019搭建Qt开发环境 安装扩展插件 Qt VS Tools Qt Versions配置 问题 VS2019双击编辑UI时闪退 qt显示中文乱
  • 区块链物品溯源系统

    文章目录 前言 一 区块链有哪些特点 二 区块链能给品牌或者行业带来什么 1 信任度 2 小程序展示 总结 前言 区块链是一个典型的分布式协同系统 多方共同维护一个不断增长的分布式数据记录 这些数据通过密码学技术保护内容和时序 使得任何一方
  • Qt multiple definition of (function)

    前景 做项目代码优化 将原来的代码按简单工厂模式进行重新组合编写 对整个模块的文件夹进行分类 归纳 中途 出现这一问题 问题详述 某一类中的全部函数都有error multiple definition of function name 解
  • Linux 下刷 TWRP

    安装 adb 和 fastboot apt install android tools adb android tools fastboot 下载需要的 TWRP https dl twrp me flo 开机状态下进入 bootloade
  • async_await用法

    async作为修饰关键字修饰在函数前 表示该函数是一个异步函数 await的使用必须有async关键字 await等待的必须是一个promise对象 async返回的是一个promise对象 asyn function A return 星
  • pthread_cond_destroy()函数的使用

    NAME pthread cond destroy pthread cond init destroy and initialize condition variables SYNOPSIS THR include
  • 像数组一样使用NodeList:一个对象组合的有效用法

    场景 我是用querySelectorAll 查询了一些标记 并收到了一个NodeList响应 问题 节点列表类似于数组 比如 他们都有一个长度属性 它们都在括号中的索引访问它们的属性或者子元素 NodeList 0 尝试使用 map fi
  • 最小二乘法–高斯牛顿迭代法

    最小二乘法 高斯牛顿迭代法 本文将详解最小二乘法的非线性拟合 高斯牛顿迭代法 1 原理 高斯 牛顿迭代法的基本思想是使用泰勒级数展开式去近似地代替非线性回归模型 然后通过多次迭代 多次修正回归系数 使回归系数不断逼近非线性回归模型的最佳回归
  • ELK收集docker日志

    转载来源 ELK收集docker日志 1 安装docker 安装依赖 yum install y yum utils device mapper persistent data lvm2 添加软件源 yum config manager a
  • 【简单】228. 汇总区间

    原题链接 https leetcode cn problems summary ranges description 228 汇总区间 给定一个 无重复元素 的 有序 整数数组 nums 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围
  • CVPR 2021 Object Detection

    一 关于3D有26篇 3DIoUMatch Leveraging IoU Prediction for Semi Supervised 3D Object Detection ST3D Self Training for Unsupervi
  • 数据结构---红包分配算法

    红包分配算法 错误解法 二倍均值法 JAVA实现 线段切割法 确定每一条子线段的长度 JAVA实现 问题如下 所有人抢到的金额之和要等于红包金额 不能多也不能少 每个人至少抢到1分钱 要保证红包拆分的金额尽可能分布均衡 不要出现两极分化太严
  • Linux下软链接方法切换CUDA版本

    Linux下软链接方法切换CUDA版本 Linux下安装多版本的CUDA 直接切换版本 CUDA切换 sudo rm rf usr local cuda 删除之前的软链接 sudo ln s usr local cuda 10 0 usr
  • Allegro如何导出和导入设计规则操作指导

    Allegro如何导出和导入设计规则操作指导 当需要借用另外一款PCB的设计规则时候 Allegro支持把PCB设计规则导入到另外一块PCB中 如下图 具体操作如下 打开规则管理器 打开后如下图
  • 黑马程序员mysql笔记--索引基本操作部分

    视频链接 https www bilibili com video BV1iF411z7Pu 1 3 1 索引的基本操作 1 3 1 1 索引概述 索引是什么 索引是通过某种算法 构建出一个数据模型 用于快速找出在某个列中有一特定值的行 不
  • 《A Metric Learning Reality Check》笔记

    1 是 metric learning 的一篇学术打假文 回顾了 deep metric learning 领域两个经典工作 contrastive loss triplet loss 和近年来 2017 2019 见文中 Table 6
  • DC-DC电源管理

    BUCK电源芯片的使用与选择 BUCK电路降压原理 在开关S闭合时 对电感L与电容C进行充电同时也对负载R供电 在开关S断开时储能元器件L与C继续对R进行供电并通过D1形成回路 输出电压Vo Vi Ton Ton Toff Ton 开关S闭
  • 【C语言】实现一个通讯录:通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址

    先写一个只能录固定人数的通讯录 不能增容 不能保存 通讯录可以用来存储1000个人的信息 每个人的信息包括 姓名 性别 年龄 电话 住址 实现功能 1 添加联系人信息 2 删除指定联系人信息 3 查找指定联系人信息 4 修改指定联系人信息
  • Linux 压缩解包命令讲解

    tar命令使用讲解 压缩 tar命令 c 生成档案文件 v 列出归档解档的详细过程 f 指定档案文件名称 t 列出档案在包含的文件 x 解开档案文件 打包 tar cvf a tar txt tar cf a tar txt 解包 tar
  • mysql split函数用逗号分隔的实现方法

    本文主要介绍了mysql split函数用逗号分隔的实现 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 1 定义存储过程 用于分隔字符串 1 2 3 4 5 6 7 8