你還在爲不會寫Mysql自定義函數而糾結嗎?快來看看這篇文章

需求

有一個溫度表我想獲取某個用戶所有數據,當然我們有許多方法可以實現這個功能,比如可以使用group_concat實現以及服務器端處理 但我們這裏使用函數來實現一下

數據集

數據集

函數

這裏貼一下group_concat代碼

SELECT name,GROUP_CONCAT(date,"溫度",temperature) from test where name="張亮"

下面用函數來實現一下

CREATE DEFINER = `root`@`localhost` FUNCTION `new_group_concat`(selname varchar(20))#入參
 RETURNS varchar(100)
BEGIN
	DECLARE e1 varchar(100);#內置返回變量
	DECLARE e2 DOUBLE;#接收每次查詢的體溫
	DECLARE e3 DATETIME;#接收每次查詢的日期
	DECLARE e4 VARCHAR(50);#拼接體溫和日期	
	DECLARE count int;#查詢該用戶的體溫記錄數
	SELECT Count(1) FROM test  where test.name=selname   INTO count ;
	WHILE count>0#while循環查詢體溫和日期
	DO	set count=count-1;
		select temperature,date from test where test.name=selname  LIMIT count,1 INTO e2,e3;
		SET e4=CONCAT_WS("溫度",CAST(e3 AS CHAR),CAST(e2 AS CHAR));
		set e1=CONCAT_WS(",",e1,e4);	
	END WHILE;
	RETURN e1;
END;

結果

兩者的結果都是一樣的

這是group_concat的運行結果

group_concat結果

這是自定義函數的運行結果

結果

函數寫法

函數頭

首先我們需要定義入參,參數如果是varchar類型必須定義長度。
其次需要定義返回類型。然後我們的函數頭就寫好了

CREATE DEFINER = `root`@`localhost` FUNCTION `new_group_concat`(selname varchar(20))#入參
 RETURNS varchar(100)

這裏的函數頭是固定的
函數體寫在begin和end之間

函數體
BEGIN
	#函數體位置
END;

函數體中每句話以 “;” 結尾,注意到這些之後排好邏輯就可以成功編寫一個函數了

變量聲明
DECLARE e1 varchar(100);#內置變量
變量賦值

變量賦值有兩種方法可以在查詢語句中使用INTO進行賦值,比如這樣,

SELECT Count(1) FROM test  where test.name=selname   INTO count ;

當然這個賦值必須一對一賦值假如在下面這個語句中沒有limit
那麼函數在運行時就會報錯

select temperature,date from test where test.name=selname  LIMIT count,1 INTO e2,e3;

也可以直接使用set直接對其賦值,如

set count=count-1;
循環語句

可以使用while循環,如

WHILE count>0
	DO
		set count=count-1;
	END WHILE;

以及loop循環,這個循環條件和激素那幾園中的while(1)相似,如

loop_name:LOOP
  IF 條件 THEN
    LEAVE loop_name; --離開循環
  END IF;
  SET sum=sum+i;
  SET i=i+1;
END LOOP;  -- 循環結束

最後還有repeat循環,這個類似於do while 語句

 REPEAT  -- 循環開始
   #循環體
   UNTIL 條件 END REPEAT;  -- 循環結束
判斷語句

簡單的IF ELSE語句需要注意的時IF的條件後要添加THEN
再繼續寫條件內的語句

IF 條件 THEN
    #內容
  ELSEIF 條件 THEN
	 #內容
	 ELSE
	 #內容
END IF;
條件寫法

我們在寫條件時與用and來表示而或用or表示如下

IF A>B and C>D OR D<B THEN--簡單演示不涉及邏輯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章