我在我的数据库中有一个ID列,它显示结果如下
我希望获得一个额外的列,我可以将其总和如下
任何人都可以帮助我,我应该使用哪个sql函数将字符串分解为字符并添加它们?
答案 0 :(得分:1)
假设一个数字总是4位数,你可以这样做:
select (id/1000)+((id%1000)/100)+((id%100)/10)+(id%10)
如果ID字段为varchar
,则只需在分割前将其投放到int
。当然,如果结果超过1位,您将无法再获得其数字的总和。
答案 1 :(得分:1)
您可以使用此table-valued function:
CREATE FUNCTION [dbo].[Chars]
(
@Text NVARCHAR(MAX)
)
RETURNS @ItemTable TABLE (Item VARCHAR(250))
AS
BEGIN
DECLARE @i INT
DECLARE @Item NVARCHAR(4000)
SET @i = 1
WHILE (@i <= LEN(@Text))
BEGIN
INSERT INTO @ItemTable(Item)
VALUES(SUBSTRING(@Text, @i, 1))
SET @i = @i + 1
END
RETURN
END
现在这个查询应该可以正常工作:
SELECT t.ID, SUM(CAST(Split.Item AS INT)) AS SumID
FROM dbo.TableName t
CROSS APPLY dbo.Chars(CONVERT(varchar(10), t.ID))Split
GROUP BY t.ID