当前位置: 代码网 > it编程>数据库>Mysql > MySQL获取二维数组字符串的最后一个值的实现代码

MySQL获取二维数组字符串的最后一个值的实现代码

2024年05月27日 Mysql 我要评论
要分离字符串:[["1","1007","1007012"],["5","5005"],["

要分离字符串:[["1","1007","1007012"],["5","5005"],["6","6002","6002005"],["7","7003"],["8","8001","8001005"]],获取里面各数组里面的最后一个值,即1007012,5005,6002005,7003和8001005

1,内容替换

先把内容替换了,把双引号和替换为空的,再把中间中括号替换为指定字符

替换后的:

 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获取到数组的最后一个值。

分离函数:

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 ; 

使用:

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;

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

总结

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

以上就是mysql获取二维数组字符串的最后一个值的实现代码的详细内容,更多关于mysql获取字符串最后一个值的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com