MySQL获取二维数组字符串的最后一个值的实现代码!
MySQL获取二维数组字符串的最后一个值的实现代码!
这篇文章主要介绍了MySQL获取二维数组字符串的最后一个值的实现,文中有详细的代码示例供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下。

要分离字符串:[["1","1007","1007012"],["5","5005"],["6","6002","6002005"],["7","7003"],["8","8001","8001005"]],获取里面各数组里面的最后一个值,即1007012,5005,6002005,7003和8001005
1,内容替换
先把内容替换了,把双引号和替换为空的,再把中间中括号替换为指定字符
替换后的:
| 1 2 3 4 5 6 | SELECTREPLACE( REPLACE(  REPLACE(REPLACE( s.gdbq, '],[', '@'),'[', ''), ']', ''), '"', '') replace_gdbq FROM(SELECT'[["1","1007","1007012"],["5","5005"],["6","6002","6002005"],["7","7003"],["8","8001","8001005"]]'ASgdbq) ASs | 
2,写函数处理
利用LOCATE找到位置,再用SUBSTRING分离字符串,再用SUBSTRING_INDEX获取到数组的最后一个值。
分离函数:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | DROPFUNCTIONIF EXISTS func_split_arr_last_index;DELIMITER //CREATEFUNCTIONfunc_split_arr_last_index(inputString VARCHAR(1024), delimiterChar VARCHAR(10))RETURNSVARCHAR(1024) BEGIN-- 分割后的子字符串DECLAREsplitStr VARCHAR(255);-- 再分割后的子字符串数组最后一个值DECLARElastIndexStr VARCHAR(255);-- 分割后的结果DECLAREoutputResult VARCHAR(255) DEFAULT'';-- 分割后的子字符串的位置DECLAREcurrentPos INTDEFAULT1;-- 分割字符的位置DECLAREdelimiterPos INT; -- 分割字符的大小DECLAREdelimiterLength INT; SETdelimiterLength = LENGTH(delimiterChar);-- 循环查找分割字符WHILE currentPos <= LENGTH(inputString) DO-- 查找分割字符的位置SETdelimiterPos = LOCATE(delimiterChar, inputString, currentPos);-- 如果找到分割字符,则截取子字符串IF delimiterPos > 0 THENSETsplitStr = SUBSTRING(inputString, currentPos, delimiterPos - currentPos); -- 找出最后一个值SETlastIndexStr = SUBSTRING_INDEX(splitStr, ',', -1); -- 将子字符串最后一个值添加到结果中SEToutputResult = CONCAT(outputResult, lastIndexStr, ',');-- 更新索引SETcurrentPos = delimiterPos + delimiterLength;ELSE-- 如果没有找到分割字符,则将剩余的字符串添加到结果中SETsplitStr = SUBSTRING(inputString, currentPos);-- 找出最后一个值SETlastIndexStr = SUBSTRING_INDEX(splitStr, ',', -1); SEToutputResult = CONCAT(outputResult, lastIndexStr);-- 退出循环SETcurrentPos = LENGTH(inputString) + 1;ENDIF;ENDWHILE;-- 返回分割后的结果RETURNoutputResult;END//DELIMITER ; | 
使用:
| 1 2 3 4 5 6 7 8 | SELECTfunc_split_arr_last_index(replace_gdbq, '@') FROM(SELECTREPLACE( REPLACE(  REPLACE(REPLACE( s.gdbq, '],[', '@'),'[', ''), ']', ''), '"', '') replace_gdbq FROM(SELECT'[["1","1007","1007012"],["5","5005"],["6","6002","6002005"],["7","7003"],["8","8001","8001005"]]'ASgdbq) ASs) ASt; | 

这样分离数据的就目标达成了,就可以进行下一步操作了。
总结
分离字符串,必须得用到LOCATE(找到位置)和SUBSTRING(分离字符串),有考虑直接用replace进行替换,但是这个可能会出现误差,导致问题,就不推荐使用。 对于一位数组的位置,如果是固定长度的就还好指定位置,不然只有第一个和最后一个位置是确定的。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需129元,即可下载本站文章涉及的文件和软件。
