用于将字符串拆分为字符的SQL函数
我的数据库中有一个ID列,它显示的结果如下用于将字符串拆分为字符的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位,您将无法再次获得其数字之和。您可以使
- 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