mysql字符串分割函数(行转列)

由于工作需要需要处理一些以逗号分隔的字符串,每次都要现做很是麻烦,网上找了很多都没有现成的,好吧,自己动手写一个好了

 1 CREATE DEFINER = `harri`@`%` FUNCTION `str_for_substr`(`num` int, `str` varchar(5000))
 2  RETURNS varchar(100)
 3 BEGIN
 4     /*函数功能: 把带逗号的字符串分割取出
 5         参数: num 要取出的字符串的索引值, 以0开始
 6                     str 以逗号分割的字符串
 7         扩展: 将逗号替换成其他符合,即可完成不同分隔符拆分字符串,亦可以把分隔符作为参数
 8   */
 9 SET @str_for_substr =
10 11 SUBSTRING( 12 SUBSTRING_INDEX(str, ',', num + 1), 13 CASE num 14 WHEN 0 THEN 15 CHAR_LENGTH( 16 SUBSTRING_INDEX(str, ',', num) 17 ) + 1 18 ELSE 19 CHAR_LENGTH( 20 SUBSTRING_INDEX(str, ',', num) 21 ) + 2 22 END, 23 CASE num 24 WHEN 0 THEN 25 CHAR_LENGTH( 26 SUBSTRING_INDEX(str, ',', num + 1) 27 ) - CHAR_LENGTH( 28 SUBSTRING_INDEX(str, ',', num) 29 ) 30 ELSE 31 CHAR_LENGTH( 32 SUBSTRING_INDEX(str, ',', num + 1) 33 ) - CHAR_LENGTH( 34 SUBSTRING_INDEX(str, ',', num) 35 ) - 1 36 END 37 ); 38 39 40 RETURN @str_for_substr; 41 END;

 测试:

mysql> SELECT str_for_substr(3,'one,two,three,four,five,six,seven') as 'value';
+-------+
| value |
+-------+
| four |
+-------+
1 row in set

 

实例应用

mysql> select * from test;
+---+------------------------+
| a | b |
+---+------------------------+
| 1 | 你好,哈哈,不错 |
| 2 | 测试,不错 |
| 3 | test,test2,test3,test4 |
| 4 | 你好,哈哈,不错 |
| 5 | 你好,哈哈,不错 |
| 6 | 你好,哈哈,不错 |
| 7 | 你好,哈哈,不错 |
| 8 | 你好,哈哈,不错 |
+---+------------------------+
8 rows in set

创建存储过程如下

CREATE DEFINER = `root`@`%` PROCEDURE `split_str`()SQL SECURITY INVOKER
BEGINDECLARE a1 varCHAR(20);DECLARE b1 varchar(10000);DECLARE done INT DEFAULT FALSE;DECLARE cur CURSOR FOR SELECT a,b from test ;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN cur;read_loop: LOOPFETCH cur INTO a1,b1;IF done THENLEAVE read_loop;END IF;SET @num = LENGTH(b1) - LENGTH(REPLACE(b1, ',', ''));SET @i = 0;WHILE (@i <=@num ) DOINSERT INTO test1
VALUES(a1,str_for_substr(@i,b1)
);set @i = @i+1;END WHILE;END LOOP;CLOSE cur;END;

执行结果如下

mysql> select * from test1;
+---+-------+
| a | b |
+---+-------+
| 1 | 你好 |
| 1 | 哈哈 |
| 1 | 不错 |
| 2 | 测试 |
| 2 | 不错 |
| 3 | test |
| 3 | test2 |
| 3 | test3 |
| 3 | test4 |
| 4 | 你好 |
| 4 | 哈哈 |
| 4 | 不错 |
| 5 | 你好 |
| 5 | 哈哈 |
| 5 | 不错 |
| 6 | 你好 |
| 6 | 哈哈 |
| 6 | 不错 |
| 7 | 你好 |
| 7 | 哈哈 |
| 7 | 不错 |
| 8 | 你好 |
| 8 | 哈哈 |
| 8 | 不错 |
+---+-------+
24 rows in set

 

转载于:https://www.cnblogs.com/jiangwenju/p/4886066.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用window.btoa base64对接口数组进行加密处理

大家好&#xff0c;我是孙叫兽&#xff0c;前端全栈工程师&#xff0c;uniapp技术交流群&#xff1a;1149933135 项目采用uniappuView开发&#xff1b; uiapp官方文档&#xff1a;https://uniapp.dcloud.io/ uview官方文档&#xff1a;http://uviewui.com/components/intro.htm…

值得收藏的40个黑客常用入侵端口总结

值得收藏的40个黑客常用入侵端口总结-安全-PHP中文网 常用端口&#xff1a; 21端口渗透剖析 FTP通常用作对远程服务器进行管理&#xff0c;典型应用就是对web系统进行管理。一旦FTP密码泄露就直接威胁web系统安全&#xff0c;甚至黑客通过提权可以直接控制服务器。这里剖析渗透…

csdn个人主页下如何添加微信公众号及超链接

本文以CSDN孙叫兽的博客为例。打开CSDN孙叫兽的博客主页。谷歌浏览器下找到这个页面的源代码&#xff0c;鼠标右键-检查&#xff0c;或者F12打开调试页面。第一步找选中图标&#xff0c;第二步选中目标区域&#xff0c;第三步找到对应的前端代码复制到本地文件&#xff08;选中…

2015-10-15 css3

图片模糊效果 <img id "img1" src"image/免费学PS.jpg" style"-webkit-filter: blur(5px)"> //webkit解决兼容问题一&#xff1a;特殊选择器 1. *可以匹配任何标记 2. >表示后面是前面的子元素 #d1 span //表示id为d1的div下面的…

proxy aspectj_使用AspectJ,Javassist和Java Proxy进行代码注入的实用介绍

proxy aspectj静态地或在运行时将代码片段注入已编译的类和方法中的功能可能会很有帮助。 这尤其适用于在没有源代码的第三方库中或在无法使用调试器或探查器的环境中对问题进行故障排除。 代码注入对于处理涉及整个应用程序的问题&#xff08;例如性能监视&#xff09;也很有用…

gshark(github敏感信息搜集工具)

gshark 介绍&#xff1a;这是个可视化的监测工具&#xff0c;它不仅可以监控github&#xff0c;还可以监控gitlab‍ 所需环境&#xff1a; go64位gccLinux 一个github账号token&#xff0c;获取地址&#xff1a;https://github.com/settings/tokens 不建议使用window部署&a…

CSDN个人主页下如何添加微信公众号?

本人孙叫兽,前端全站程序员。微信公众号:电商程序员。 本文以CSDN孙叫兽的博客为例。 打开CSDN孙叫兽的博客主页。 谷歌浏览器下找到这个页面的源代码,鼠标右键-检查,或者F12打开调试页面。第一步找选中图标,第二步选中目标区域,第三步找到对应的前端代码复制到…

DotNetOpenAuth实践之搭建验证服务器

系列目录&#xff1a; DotNetOpenAuth实践系列&#xff08;源码在这里&#xff09; DotNetOpenAuth是OAuth2的.net版本&#xff0c;利用DotNetOpenAuth我们可以轻松的搭建OAuth2验证服务器&#xff0c;不废话&#xff0c;下面我们来一步步搭建验证服务器 本次搭建环境&#xff…

使用可选是可选的

在上周的“收藏中的可选内容”一文发表之后&#xff0c;我不禁要多讲一些关于同一只野兽的事情。 更多细节。 最初由Google Guava引入并后来包含在Java 8软件包中的Optionial类只是包装可选对象的包装器。 从包装对象存在或包装中没有对象的意义上讲&#xff0c;包装对象是可选…

kali 清理系统垃圾文件

网上常用的shell命令 #!/bin/bash echo "clear temp file..." sudo apt-get autoclean # 清理旧版本的软件缓存 sudo apt-get clean # 清理所有软件缓存 sudo apt-get autoremove # 删除系统不再使用的孤立软件 echo "clear disk temp..." sync  #…

PDF如何XSS

简介 在上传点时&#xff0c;如果上传不了图片格式的文件&#xff0c;可以尝试上传html或者pdf文件来达到xss的效果。上传html就不多说了&#xff0c;下面来说说怎么让pdf弹窗。 操作步骤&#xff1a; 环境准备&#xff1a;python3 需要准备poc.py和poc.js poc.py内容 # FRO…

NOI 练手题 图像旋转翻转变换

题目&#xff1a;来源http://noi.openjudge.cn/ch0112/09/ 总时间限制: 1000ms内存限制: 65536kB描述给定m行n列的图像各像素点灰度值&#xff0c;对其依次进行一系列操作后&#xff0c;求最终图像。 其中&#xff0c;可能的操作及对应字符有如下四种&#xff1a; A&#xff1a…

CSDN Chrome插件来啦,听说可以提升开发者效率,我们先来研究一波

孙叫兽,安徽宿州人,北漂前端全栈程序员(朝着这个目标努力),如果你觉得这篇文章帮助了你,记得三连👉(转发+点赞+评论),技术交流请联系个人主页左侧导航栏。 这个插件的定位是提升程序员的开发效率的,至于哪方面?自己慢慢体会,我大致的感觉就是搜索引擎的导航网站的…

C盘全面清理教程!彻底清理所有垃圾!

预计阅读时间 10分钟 资源在文末获取哦 老懒粉应该知道&#xff0c;我们写过“宇宙最细”的系统安装/重装教程 但我们除了新机&#xff0c;通常情况下重装系统的目的是什么&#xff1f; 虽然不管电脑出现了什么样的软件方面问题&#xff0c;我们都可以通过重装系统来一劳永…

python常用类型的内置函数列表

1、list.append(obj) 向列表中加入一个对象obj fruits [apple, pear, orange] >>> fruits.append(apple) >>> fruits [apple, pear, orange, apple]2、list.count(obj) 返回一个对象obj在列表中出现的次数 >>> fruits.count(a…

java虚拟内存扩展_Java 8虚拟扩展方法

java虚拟内存扩展我一直关注Java 8 Lambda表达式项目的发展已经有一段时间了&#xff0c;我对其当前的进展状态感到非常兴奋。 我发现的最新“易于理解”的演示文稿是这样的&#xff1a; http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf 现在&…

url重定向绕过方式

url重定向绕过方式 俗话说的好&#xff0c;上有政策&#xff0c;下有对策&#xff0c;url重定向的绕过姿势也越来越多样化。普通url重定向方法测试不成功&#xff0c;换个姿势&#xff0c;说不定可以再次绕过。 这里总结下成功的绕过方式。 &#xff08;1&#xff09; 使用…

【转】android:DDMS查看Threads--不错

原文网址&#xff1a;http://www.cnblogs.com/mybkn/archive/2012/05/27/2520335.html 有时候程序运行出现死锁或者信号量卡死是很纠结的问题&#xff0c;单看代码很难分析定位问题&#xff0c;这时候可以借助DDMS来查看threads的运行情况&#xff0c;一目了然。 手机连接上USB…

史上最全的技术手册整理总结,编程小白都从这篇文章迅速成为大牛

孙叫兽,前端全栈攻城狮,更多资源请关注微信公众号:电商程序员 整理云端的开发,助你开发效率与认知起码提升十倍。 技术手册 Python初级手册Python进阶手册Python2手册Python3手册HTML手册CSS手册CSS3手册HTML5手册Boostrap4手册Boostrap3手册Boostrap手册

并发最佳实践

本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的过程&#xff01; 在这里查看 &#xff01; 目录 1.简…