Mysql 如何在SQL中对逗号分隔的字符串求和?
所以我想得到这个结果:Mysql 如何在SQL中对逗号分隔的字符串求和?,mysql,sql,Mysql,Sql,所以我想得到这个结果: id value 1 1,2,3,4 2 2,3,4 我可以用SQL(MySQL)来做吗?只要付出很大的努力,你就可以做到这一点。实际上,这是一种非常非常糟糕的数据存储方式 本着有时我们不得不使用格式不受我们控制的数据的精神: id sum 1 10 2 9 调用嵌套函数以获取字符串中的第n个值。concat(value',0')用于处理值少于表达式的情况。在这种情况下,嵌套的子字符串_index()将返回大于列表中项数的任何n值的最后一
id value
1 1,2,3,4
2 2,3,4
我可以用SQL(MySQL)来做吗?只要付出很大的努力,你就可以做到这一点。实际上,这是一种非常非常糟糕的数据存储方式 本着有时我们不得不使用格式不受我们控制的数据的精神:
id sum
1 10
2 9
调用嵌套函数以获取字符串中的第n个值。concat(value',0')
用于处理值少于表达式的情况。在这种情况下,嵌套的子字符串_index()
将返回大于列表中项数的任何n值的最后一个值。将0
连接到列表可确保这不会影响总和
SQL FIDLE是。您可以更动态地创建函数。请按照以下步骤操作
select id,
(substring_index(value, ',', 1) +
substring_index(substring_index(concat(value, ',0'), ',', 2), ',', -1) +
substring_index(substring_index(concat(value, ',0'), ',', 3), ',', -1) +
substring_index(substring_index(concat(value, ',0'), ',', 4), ',', -1) +
substring_index(substring_index(concat(value, ',0'), ',', 5), ',', -1)
) as thesum
from t;
首先,您为什么要以如此不方便的方式存储数据?这可能是数据的重复。公认的答案是创建存储过程(也提供了存储过程)。
CREATE FUNCTION GetToalOfCommaSeperatedVal
(
@commaSeperatedVal varchar(100)
)
RETURNS int
AS
BEGIN
declare @sum int
DECLARE @x XML
SELECT @x = CAST('<A>'+ REPLACE(@commaSeperatedVal,',','</A><A>')+ '</A>' AS XML)
SELECT @sum=sum(t.value('.', 'int'))
FROM @x.nodes('/A') AS x(t)
return @sum
END
GO
select id,dbo.GetToalOfCommaSeperatedVal(value) from YOUR_TABLE