用于将字符串拆分为字符的SQL函数

时间:2014-08-05 11:28:43

标签: sql sql-server-2008

我在我的数据库中有一个ID列,它显示结果如下

  • 1121
  • 1232
  • 1233

我希望获得一个额外的列,我可以将其总和如下

  • 5
  • 8
  • 9

任何人都可以帮助我,我应该使用哪个sql函数将字符串分解为字符并添加它们?

2 个答案:

答案 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

这是演示http://sqlfiddle.com/#!3/8eea7/8/0