继续《mysql 存储过程和函数》的实战:
要分离字符串:[["1","1007","1007012"],["5","5005"],["6","6002","6002005"],["7","7003"],["8","8001","8001005"]],获取里面各数组里面的最后一个值,即1007012,5005,6002005,7003和8001005
1,内容替换
先把内容替换了,把双引号和替换为空的,再把中间中括号替换为指定字符
替换后的:
sql"> 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获取到数组的最后一个值。
分离函数:
sql">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 THENSET 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 ;
使用:
sql">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 触发器》