当前位置:   article > 正文

关于MySql自定义函数的自我见解_mysql function参数varchar

mysql function参数varchar

需求

有一个温度表我想获取某个用户所有数据,当然我们有许多方法可以实现这个功能,比如可以使用group_concat实现以及服务器端处理 但我们这里使用函数来实现一下

数据集

数据集

函数

这里贴一下group_concat代码

SELECT name,GROUP_CONCAT(date,"温度",temperature) from test where name="张亮"
  • 1

下面用函数来实现一下

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

结果

两者的结果都是一样的

这是group_concat的运行结果
  • 1

group_concat结果

这是自定义函数的运行结果
  • 1

结果

函数写法

函数头

首先我们需要定义入参,参数如果是varchar类型必须定义长度。
其次需要定义返回类型。然后我们的函数头就写好了

CREATE DEFINER = `root`@`localhost` FUNCTION `new_group_concat`(selname varchar(20))#入参
 RETURNS varchar(100)
  • 1
  • 2

这里的函数头是固定的
函数体写在begin和end之间

函数体
BEGIN
	#函数体位置
END;
  • 1
  • 2
  • 3

函数体中每句话以 “;” 结尾,注意到这些之后排好逻辑就可以成功编写一个函数了

变量声明
DECLARE e1 varchar(100);#内置变量
  • 1
变量赋值

变量赋值有两种方法可以在查询语句中使用INTO进行赋值,比如这样,

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

当然这个赋值必须一对一赋值假如在下面这个语句中没有limit
那么函数在运行时就会报错

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

也可以直接使用set直接对其赋值,如

set count=count-1;
  • 1
循环语句

可以使用while循环,如

WHILE count>0
	DO
		set count=count-1;
	END WHILE;
  • 1
  • 2
  • 3
  • 4

以及loop循环,这个循环条件和激素那几园中的while(1)相似,如

loop_name:LOOP
  IF 条件 THEN
    LEAVE loop_name; --离开循环
  END IF;
  SET sum=sum+i;
  SET i=i+1;
END LOOP;  -- 循环结束

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

最后还有repeat循环,这个类似于do while 语句

 REPEAT  -- 循环开始
   #循环体
   UNTIL 条件 END REPEAT;  -- 循环结束
  • 1
  • 2
  • 3
判断语句

简单的IF ELSE语句需要注意的时IF的条件后要添加THEN
再继续写条件内的语句

IF 条件 THEN
    #内容
  ELSEIF 条件 THEN
	 #内容
	 ELSE
	 #内容
END IF;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
条件写法

我们在写条件时与用and来表示而或用or表示如下

IF A>B and C>D OR D<B THEN--简单演示不涉及逻辑
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/318759
推荐阅读
相关标签
  

闽ICP备14008679号