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
SELECT REPLACE ( REPLACE REPLACE (REPLACE ( s.gdbq, '],[', '@' ),
'[', '' ), ']', '' ), '"', '' ) replace_gdbq FROM
(
SELECT '[["1","1007","1007012"],["5","5005"],
["6","6002","6002005"],["7","7003"],["8","8001","8001005"]]' AS gdbq
) AS s

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
DROP FUNCTION IF EXISTS func_split_arr_last_index;
DELIMITER //
CREATE FUNCTION func_split_arr_last_index(inputString VARCHAR(1024), delimiterChar VARCHAR(10))
RETURNS VARCHAR(1024)
BEGIN
-- 分割后的子字符串
DECLARE splitStr VARCHAR(255);
-- 再分割后的子字符串数组最后一个值
DECLARE lastIndexStr VARCHAR(255);
-- 分割后的结果
DECLARE outputResult VARCHAR(255) DEFAULT '';
-- 分割后的子字符串的位置
DECLARE currentPos INT DEFAULT 1;
-- 分割字符的位置
DECLARE delimiterPos INT;
-- 分割字符的大小
DECLARE delimiterLength INT;
SET delimiterLength = LENGTH(delimiterChar);
-- 循环查找分割字符
WHILE currentPos <= LENGTH(inputString) DO
-- 查找分割字符的位置
SET delimiterPos = LOCATE(delimiterChar, inputString, currentPos);
-- 如果找到分割字符,则截取子字符串
IF delimiterPos > 0 THEN
SET splitStr = SUBSTRING(inputString, currentPos, delimiterPos - currentPos);
-- 找出最后一个值
SET lastIndexStr = SUBSTRING_INDEX(splitStr, ',', -1);
-- 将子字符串最后一个值添加到结果中
SET outputResult = CONCAT(outputResult, lastIndexStr, ',');
-- 更新索引
SET currentPos = delimiterPos + delimiterLength;
ELSE
-- 如果没有找到分割字符,则将剩余的字符串添加到结果中
SET splitStr = SUBSTRING(inputString, currentPos);
-- 找出最后一个值
SET lastIndexStr = SUBSTRING_INDEX(splitStr, ',', -1);
SET outputResult = CONCAT(outputResult, lastIndexStr);
-- 退出循环
SET currentPos = LENGTH(inputString) + 1;
END IF;
END WHILE;
-- 返回分割后的结果
RETURN outputResult;
END //
DELIMITER ;

使用:

1
2
3
4
5
6
7
8
SELECT func_split_arr_last_index(replace_gdbq, '@') FROM (
SELECT REPLACE ( REPLACE REPLACE (REPLACE ( s.gdbq, '],
[', '@' ),'[', '' ), ']', '' ), '"', '' ) replace_gdbq FROM
(
SELECT '[["1","1007","1007012"],["5","5005"],
["6","6002","6002005"],["7","7003"],["8","8001","8001005"]]' AS gdbq
) AS s
) AS t;

2024423111035489

这样分离数据的就目标达成了,就可以进行下一步操作了。

总结

分离字符串,必须得用到LOCATE(找到位置)和SUBSTRING(分离字符串),有考虑直接用replace进行替换,但是这个可能会出现误差,导致问题,就不推荐使用。 对于一位数组的位置,如果是固定长度的就还好指定位置,不然只有第一个和最后一个位置是确定的。

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

阿里数据分析企业实训项目!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>