myql 获取二维数组字符串的最后一个值

         继续《mysql 存储过程和函数》的实战:

        要分离字符串:[["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 触发器》

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值