前几天同事做了个个案,要把一个Text文本里的诸如“100*50*3.05*100.01*50*30……”形式的字符串的各部分累加起来,由于记录数很多所以我写了个函数来处理这个部分……
![]()
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')