自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL中返回計(jì)算表達(dá)式的函數(shù)

數(shù)據(jù)庫 SQL Server
SQL中的函數(shù)可以實(shí)現(xiàn)很多的功能,下面為您介紹一個(gè)SQL中返回計(jì)算表達(dá)式的函數(shù),供您參考和學(xué)習(xí),希望對(duì)您有所啟迪。

下面為您介紹一個(gè)SQL中返回計(jì)算表達(dá)式的函數(shù),該函數(shù)可以計(jì)算加、減、乘、除,但是不能算冪,供您參考,希望對(duì)您學(xué)習(xí)SQL中的函數(shù)能有有所幫助。

 

  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函數(shù)的用法

SQL中循環(huán)語句的效果實(shí)例

SQL中類似For循環(huán)處理的實(shí)例

對(duì)存儲(chǔ)過程代替SQL語句的討論

SQL聚合函數(shù)之Avg 函數(shù)

 

責(zé)任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-05-30 16:11:46

Javascript

2024-03-25 13:46:12

C#Lambda編程

2011-05-11 17:40:30

PHP正則表達(dá)式

2022-09-08 11:35:45

Python表達(dá)式函數(shù)

2022-09-09 00:25:48

Python工具安全

2020-10-16 06:40:25

C++匿名函數(shù)

2021-06-28 08:01:57

JS 函數(shù)表達(dá)式函數(shù)聲明

2022-08-29 23:49:41

Python字符串代碼

2009-08-31 17:11:37

Lambda表達(dá)式

2010-11-16 14:53:02

Oracle游標(biāo)表達(dá)式

2024-10-17 17:03:43

SQL正則表達(dá)式MySQL

2014-01-05 17:41:09

PostgreSQL表達(dá)式

2010-11-12 13:20:31

SQL Server

2017-08-01 00:19:15

Javascript函數(shù)函數(shù)聲明

2022-01-14 07:56:39

C#動(dòng)態(tài)查詢

2020-11-04 09:23:57

Python

2009-07-21 14:03:00

Scalaif表達(dá)式while循環(huán)

2009-07-09 09:51:07

Lambda表達(dá)式C#

2012-04-28 15:22:46

PHP

2021-08-31 07:19:41

Lambda表達(dá)式C#
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)