Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于将字符串拆分为字符的SQL函数_Sql_Sql Server 2008 - Fatal编程技术网

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

用于将字符串拆分为字符的SQL函数,sql,sql-server-2008,Sql,Sql Server 2008,我的数据库中有一个ID列,它显示的结果如下 1121 1232 1233 我想得到一个额外的列,在那里我可以得到它们的和,如下所示 五, 八, 九, 谁能帮助我使用哪个sql函数将字符串拆分为字符并添加它们吗?假设一个数字总是4位数长,您只需执行以下操作: select (id/1000)+((id%1000)/100)+((id%100)/10)+(id%10) 如果ID字段是varchar,只需在除法之前将其转换为int。当然,如果结果超过1位,您将无法再次获得其数字之和。您可以使

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

  • 1121
  • 1232
  • 1233
我想得到一个额外的列,在那里我可以得到它们的和,如下所示

  • 五,
  • 八,
  • 九,

谁能帮助我使用哪个sql函数将字符串拆分为字符并添加它们吗?

假设一个数字总是4位数长,您只需执行以下操作:

select (id/1000)+((id%1000)/100)+((id%100)/10)+(id%10)
如果ID字段是
varchar
,只需在除法之前将其转换为
int
。当然,如果结果超过1位,您将无法再次获得其数字之和。

您可以使用以下方法:


这里有一个演示

可能重复的ID总是只有4位数吗?ID总是一个数字吗?@shree.pat18是的,它总是4位数长。@ocasoProtal我也检查了它,并没有解决我的问题。+1表示动态方法。它也适用于4位以上的数字。
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