SQL函数:返回'12.5#5.01#3#4.586#5456...'的各部分SUM

Code
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'FUN')
DROP FUNCTION FUN
GO
CREATE FUNCTION FUN(@STR VARCHAR(8000))
RETURNS NUMERIC(18, 6)
AS
BEGIN
declare
@STR2 VARCHAR(8000),
@RESULT VARCHAR(8000),
@RESULT2 NUMERIC(18,6),
@I INT,
@J INT

SET @STR2 = ''
SET @RESULT = ''
SET @RESULT2 = 0.0
SET @I = 1
SET @J = 1

IF NOT (RIGHT(@STR,1) = '*')
BEGIN
SELECT @STR = @STR + '*'
END

WHILE NOT (CHARINDEX('*',@STR,@I) = 0)
BEGIN
SELECT @STR2 = SUBSTRING(@STR, @I, (CHARINDEX('*',@STR,@I)) - LEN(@RESULT) - @J)

SELECT @RESULT2 = @RESULT2 + CAST(RTRIM(@STR2) AS NUMERIC(18, 6))

SELECT @RESULT = RTRIM(CAST(@RESULT AS CHAR)) + RTRIM(CAST(@STR2 AS CHAR))
SELECT @I = LEN(@RESULT) + @J + 1
SELECT @J = @J + 1
END

RETURN @RESULT2
END

GO
SELECT dbo.FUN('100*50*3.05*100.01*50*30')
posted @ 2008-09-23 09:17  威尼斯的夏天  阅读(214)  评论(1编辑  收藏  举报