游客发表

SQL中返回计算表达式的函数

发帖时间:2025-11-04 23:48:46

SQL中返回计算表达式的函数
复制CREATE FUNCTION dbo.GetExp(@pstrExpress AS VARCHAR(8000))   RETURNS DECIMAL(18,计算6) AS   BEGIN   DECLARE @i INT,@j INT    DECLARE @c1 CHAR(1),@c2 CHAR(1),@c VARCHAR(100)   DECLARE @v1 DECIMAL(18,6),@v2 DECIMAL(18,6),@v DECIMAL(18,6)   DECLARE @t TABLE(ID INT IDENTITY(1,1),s VARCHAR(100))   DECLARE @s TABLE(ID INT IDENTITY(1,1),s VARCHAR(100))   DECLARE @sv TABLE(ID INT IDENTITY(1,1),v DECIMAL(18,6))   SET @pstrExpress = REPLACE(@pstrExpress, ,)   SELECT @i = 0,@j = LEN(@pstrExpress),@c2 = ,@c =  WHILE @i<@j   BEGIN    SELECT @c1 = @c2,@i = @i+1    SELECT @c2 = SUBSTRING(@pstrExpress,@i,1)    IF CHARINDEX(@c2,.0123456789) > 0 or (@c2 = - and @c1 IN(,*,-,+,/,())    BEGIN   SELECT @c = @c + @c2   CONTINUE  END    IF @c <>   BEGIN INSERT @t(s)  SELECT @c SELECT @c =  END    IF CHARINDEX(@c2,))>0    BEGIN       INSERT @t(s)  SELECT s FROM @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN(()),0) ORDER BY ID DESC      DELETE @s WHERE ID >= ISNULL((SELECT MAX(ID) FROM @s WHERE s IN(()),0)       CONTINUE    END    IF CHARINDEX(@c2,+-))>0    BEGIN       INSERT @t(s)  SELECT s FROM @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN(()),0) ORDER BY ID DESC      DELETE @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN(()),0)       IF @c2 <> ) INSERT @s(s) SELECT @c2      CONTINUE    END    IF CHARINDEX(@c2,*/)>0    BEGIN       INSERT @t(s)  SELECT s FROM @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN((,+,-)),0) ORDER BY ID DESC      DELETE @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN((,+,-)),0)       INSERT  @s SELECT @c2      CONTINUE    END    IF CHARINDEX(@c2,()>0 INSERT  @s SELECT @c2   END   IF @c <>  INSERT @t(s) SELECT @c   INSERT @t(s)  SELECT s FROM @s ORDER BY ID DESC   SELECT @i = 0,@j = MAX(ID) FROM @t    WHILE @i < @j   BEGIN     SELECT @i = @i + 1    SELECT @c = s FROM @t WHERE ID = @i    IF @c = ( CONTINUE    IF @c NOT IN(*,-,+,/)  BEGIN  INSERT @sv(v) SELECT CONVERT(float,@c) CONTINUE END    SELECT @vv2 = v FROM @sv  DELETE @sv  WHERE ID = (SELECT MAX(ID) FROM @sv)    SELECT @vv1 = v FROM @sv  DELETE @sv  WHERE ID = (SELECT MAX(ID) FROM @sv)    SELECT @v = CASE @c WHEN + THEN @v1 + @v2 WHEN - THEN @v1 - @v2                        WHEN * THEN @v1 * @v2 WHEN / THEN @v1 / @v2 END    INSERT @sv(v) SELECT @v   END   SELECT @vv = v FROM @sv   RETURN @v   END  1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.

    热门排行

    友情链接