天天看点

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 [email protected]的长度
	declare @amount decimal(18,2)--暂存数组中的一个值
	
    set @str=ISNULL(@str,'')--如果@str为null那么设为 空字符串
    
	if(@str='')--如果为空字符串那么返回值为null
	begin
		return null
	end
	
	
	--循环取值求和
	set @sum=0
	set @[email protected][email protected]
	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,@[email protected])
		set @[email protected][email protected]
		set @[email protected][email protected]
		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、测试结果

sql 字符串分割求和