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

下面为您介绍一个SQL中返回计算表达式的函数,该函数可以计算加、减、乘、除,但是不能算幂,供您参考,希望对您学习SQL中的函数能有有所帮助。

 

  1. CREATE FUNCTION dbo.GetExp(@pstrExpress AS VARCHAR(8000))  
  2. RETURNS DECIMAL(18,6) AS  
  3. BEGIN  
  4. DECLARE @i INT,@j INT   
  5. DECLARE @c1 CHAR(1),@c2 CHAR(1),@c VARCHAR(100)  
  6. DECLARE @v1 DECIMAL(18,6),@v2 DECIMAL(18,6),@v DECIMAL(18,6)  
  7. DECLARE @t TABLE(ID INT IDENTITY(1,1),s VARCHAR(100))  
  8. DECLARE @s TABLE(ID INT IDENTITY(1,1),s VARCHAR(100))  
  9. DECLARE @sv TABLE(ID INT IDENTITY(1,1),v DECIMAL(18,6))  
  10.  
  11. SET @pstrExpress = REPLACE(@pstrExpress,' ','')  
  12. SELECT @i = 0,@j = LEN(@pstrExpress),@c2 = '',@c = '' 
  13. WHILE @i<@j  
  14. BEGIN  
  15.  SELECT @c1 = @c2,@i = @i+1  
  16.  SELECT @c2 = SUBSTRING(@pstrExpress,@i,1)  
  17.  IF CHARINDEX(@c2,'.0123456789') > 0 or (@c2 = '-' and @c1 IN('','*','-','+','/','('))  
  18.  BEGIN   SELECT @c = @c + @c2   CONTINUE  END  
  19.  IF @c <> ''  BEGIN INSERT @t(s)  SELECT @c SELECT @c = '' END  
  20.  IF CHARINDEX(@c2,')')>0  
  21.  BEGIN   
  22.    INSERT @t(s)  SELECT s FROM @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN('(')),0) ORDER BY ID DESC  
  23.    DELETE @s WHERE ID >= ISNULL((SELECT MAX(ID) FROM @s WHERE s IN('(')),0)   
  24.    CONTINUE  
  25.  END  
  26.  IF CHARINDEX(@c2,'+-)')>0  
  27.  BEGIN   
  28.    INSERT @t(s)  SELECT s FROM @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN('(')),0) ORDER BY ID DESC  
  29.    DELETE @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN('(')),0)   
  30.    IF @c2 <> ')' INSERT @s(s) SELECT @c2  
  31.    CONTINUE  
  32.  END  
  33.  IF CHARINDEX(@c2,'*/')>0  
  34.  BEGIN   
  35.    INSERT @t(s)  SELECT s FROM @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN('(','+','-')),0) ORDER BY ID DESC  
  36.    DELETE @s WHERE ID > ISNULL((SELECT MAX(ID) FROM @s WHERE s IN('(','+','-')),0)   
  37.    INSERT  @s SELECT @c2  
  38.    CONTINUE  
  39.  END  
  40.  IF CHARINDEX(@c2,'(')>0 INSERT  @s SELECT @c2  
  41. END  
  42. IF @c <> '' INSERT @t(s) SELECT @c  
  43. INSERT @t(s)  SELECT s FROM @s ORDER BY ID DESC  
  44. SELECT @i = 0,@j = MAX(ID) FROM @t   
  45. WHILE @i < @j  
  46. BEGIN   
  47.  SELECT @i = @i + 1  
  48.  SELECT @c = s FROM @t WHERE ID = @i  
  49.  IF @c = '(' CONTINUE  
  50.  IF @c NOT IN('*','-','+','/')  BEGIN  INSERT @sv(v) SELECT CONVERT(float,@c) CONTINUE END  
  51.  SELECT @vv2 = v FROM @sv  DELETE @sv  WHERE ID = (SELECT MAX(ID) FROM @sv)  
  52.  SELECT @vv1 = v FROM @sv  DELETE @sv  WHERE ID = (SELECT MAX(ID) FROM @sv)  
  53.  SELECT @v = CASE @c WHEN '+' THEN @v1 + @v2 WHEN '-' THEN @v1 - @v2  
  54.                      WHEN '*' THEN @v1 * @v2 WHEN '/' THEN @v1 / @v2 END  
  55.  INSERT @sv(v) SELECT @v  
  56. END  
  57. SELECT @vv = v FROM @sv  
  58. RETURN @v  
  59. END 

 

 

【编辑推荐】

SQL中DATENAME函数的用法

SQL中循环语句的效果实例

SQL中类似For循环处理的实例

对存储过程代替SQL语句的讨论

SQL聚合函数之Avg 函数

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/225423.html<

赞 (0)
管理的头像管理
上一篇2025-04-16 21:42
下一篇 2025-04-16 21:43

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注