sql 字符串分割求和

功能说明:

要求某个字符串如:1,2,3,4 或者1.11,2.1,4的和

1、函数创建


USE [wqq]
GO
/****** Object:  UserDefinedFunction [dbo].[getSum]    Script Date: 07/17/2013 22:04:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--获取如字符串"1,2,3,4"中以逗号隔开的数组的长度
ALTER FUNCTION [dbo].[getSum]
(
	@str nvarchar(max),--字符串
	@ch nvarchar(100)--分隔符
)
RETURNS decimal(18,2)
AS
BEGIN
	declare @sum decimal(18,2)
	declare @location int --当前位置 循环条件
	declare @start int --记录开始取字符串的初始位置
	declare @len int --@ch的长度
	declare @amount decimal(18,2)--暂存数组中的一个值
	
    set @str=ISNULL(@str,'')--如果@str为null那么设为 空字符串
    
	if(@str='')--如果为空字符串那么返回值为null
	begin
		return null
	end
	
	
	--循环取值求和
	set @sum=0
	set @str=@str+@ch
	set @len=LEN(@ch)
	set @start=1
	set @location=CHARINDEX(@ch,@str)
	if @location=0
	begin
		set @location=LEN(@str)+1
	end
	
	while @location!=0
	begin
		set @amount=SUBSTRING(@str,@start,@location-@start)
		set @sum=@sum+@amount
		set @start=@location+@len
		set @location=CHARINDEX(@ch,@str,@start)
	end
	return @sum
	
END

2、测试

select wqq.dbo.getSum('1.1111****2.0****832389.11','****')
select wqq.dbo.getSum('1.1,2,4',',')
其中wqq是数据库名称


3、测试结果



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值