要分离字符串:[["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获取字符串最后一个值的资料请关注代码网其它相关文章!
发表评论