字符串分割为数字并累加

1. 首先考虑到数据库表中某字段存在多种分隔符,所以首先考虑将分割符统一

此处将其他符号(换行符,中文逗号,斜杠)统一为英文逗号为例

-- 中文逗号 -> 英文逗号
UPDATE `user` SET price=REPLACE(price,',', ',') WHERE user_id=1; 

-- 换行符-> 英文逗号
UPDATE `user` SET price=REPLACE(price,'\n', ',') WHERE user_id=1; 

-- 斜杠 -> 英文逗号
UPDATE `user` SET price=REPLACE(price,'/', ',') WHERE user_id=1; 

2. 将字符串分割并累加

DROP FUNCTION IF EXISTS split_sum;
-- 定义一个函数,输入值为字符串类型,返回一个浮点型(使用DECIMAL)类型
CREATE FUNCTION split_sum (str VARCHAR(200)) RETURNS DECIMAL(10,3)
DETERMINISTIC
BEGIN
	DECLARE max_size INT(11);
	DECLARE i INT(11);

	-- 10和3分别表示小数点左边和右边可以存储的十进制数字的最大个数
	-- 例 1234,567,890.123
	DECLARE sum DECIMAL(10,3); 
	SET max_size = LENGTH(str) - LENGTH(REPLACE(str, ',', '')) + 1;
	SET i = 0;
	SET sum = 0.000; 
	WHILE i < max_size DO
		SET i = i + 1;
		
		-- 使用while循环 获取每个分割完成的字符并累加
		-- ROUND(X, D) 保留D位有效数字并返回X舍入到最接近的数字。
		SET sum = sum + ROUND(SUBSTRING_INDEX(SUBSTRING_INDEX(str, ',', i),',',-1), 3); 
	END	WHILE;
	RETURN sum;
END;
UPDATE `user` set price_total=split_sum(price) WHERE user_id=1 
-- price值: 100.1, 200.4, 300.5
-- price_total值: 601
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值