最近在开发移动应用项目的时候,经常需要用多个字符串替换的情况,为了方便,自己写了一个replaceEx函数来实现批量替换,运行版本:Mysql 5.7.22,主要应用到MYSQL JSON相关函数
应用场景:各种资产变更日志,不想保存太多重复的数据
CREATE DEFINER=`root`@`%` FUNCTION `replaceEx`(str longtext,replaceJSON JSON,formatStr VARCHAR(20)) RETURNS longtext CHARSET utf8mb4
READS SQL DATA
DETERMINISTIC
SQL SECURITY INVOKER
COMMENT '【调用】批量替换字符串'
BEGIN
DECLARE idx TINYINT(1) DEFAULT 0;
DECLARE oKeys JSON;
DECLARE keyname VARCHAR(20);
SET oKeys= JSON_KEYS(replaceJSON);
WHILE idx<JSON_LENGTH(oKeys) DO
SET keyname = JSON_UNQUOTE(JSON_EXTRACT(oKeys,CONCAT('$[',idx,']')));
SET @value = JSON_EXTRACT(replaceJSON,CONCAT('$.',keyname));
SET str = REPLACE(str,CONCAT('#',keyname,'#'),REPLACE(FORMAT(@value,LENGTH(SUBSTRING_INDEX(formatStr,'.',-1))),',',''));
SET idx = idx+1;
END WHILE;
RETURN str;
END
例如:资产变更日志,数据库中保存JOSN数组,显示的时候自动替换成固定格式的说明文字
通过以上的方法可以扩展到批量替换成更多类型的函数。