什么是函数?

 函数类似于Java方法,可以传值,也有返回值,可以配合查询做一些复杂的计算。

表结构

CREATE DATABASE /*!32312 IF NOT EXISTS*/`demo` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `demo`;

/*Table structure for table `login_record` */

DROP TABLE IF EXISTS `login_record`;

CREATE TABLE `login_record` (
  `lr_id` BIGINT(11) NOT NULL AUTO_INCREMENT COMMENT '登录记录表',
  `lr_users_id` BIGINT(11) NOT NULL COMMENT '用户id',
  `lr_time` DATETIME NOT NULL COMMENT '登录时间',
  PRIMARY KEY (`lr_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

/*Table structure for table `users` */

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (
  `u_id` BIGINT(18) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `u_name` VARCHAR(11) NOT NULL COMMENT '用户名',
  `u_money` INT(11) NOT NULL COMMENT '用户金额',
  `u_day` INT(11) NOT NULL DEFAULT '1' COMMENT '用户注册天数',
  `u_member` VARCHAR(30) DEFAULT NULL COMMENT '会员标识',
  PRIMARY KEY (`u_id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

创建函数

DELIMITER $$

CREATE
    /*函数*/
    FUNCTION `demo`.`usermoney`(number INT)
    /*返回值类型*/
    RETURNS INT
    /*开始*/
    BEGIN
	/*返回*/
	RETURN (number * 100);	
    /*结束*/
    END$$

DELIMITER ;

函数的使用

SELECT usermoney(20);

SELECT `u_id`,`u_name`,usermoney(`u_money`),`u_day` 
FROM `users`

 

小练习:今天你充钱了吗?

DELIMITER $$

CREATE
    /*函数*/
    FUNCTION `demo`.`usermoney`(money INT,uday INT)
    /*返回值类型*/
    RETURNS INT
    /*开始*/
    BEGIN
	/*返回*/
	RETURN (money / uday);	
    /*结束*/
    END$$

DELIMITER ;
SELECT *,`usermoney`(`u_money`,`u_day`) AS cmed
FROM `users`;

 

普通用户练习

DELIMITER $$
/*判断值为空重新赋值*/
CREATE
    FUNCTION `demo`.`umenber`(menber VARCHAR(30))
    RETURNS VARCHAR(30)
    BEGIN
	/*创建一个变量*/
	DECLARE newmenber VARCHAR(30) DEFAULT "普通用户";
	/*如果不为空*/
	IF menber IS NOT NULL THEN
		SET newmenber = menber;
	END IF;
	RETURN newmenber;
    END$$

DELIMITER ;

20日 - 30日是活动日 每天有50的活动奖励(活动奖励每多登录一天,奖励上涨百分之50)

DELIMITER $$

CREATE
    FUNCTION `demo`.`reward`(uid BIGINT(18))
    RETURNS INT(11)
    BEGIN
	/*创建变量必须把所有的变量都放在最上面*/
	/*创建一个变量*/
	DECLARE money INT(11) DEFAULT 0;
	/*初始值*/
	DECLARE i INT(11) DEFAULT 1;
	SELECT COUNT(*) FROM `login_record` 
	WHERE `lr_users_id` = uid
	AND `lr_time` <= "2021-09-30"
	AND `lr_time` >= "2021-09-20"
	INTO @day;
	
	/*WHILE 循环*/
	WHILE i <= @day DO
		IF i = 1 THEN
			SET money = 50;
		ELSE
			SET money = money * 1.5;
		END IF;
        SET i=i+1;
        END WHILE;
	RETURN money;
    END$$

DELIMITER ;

常用函数

MySQL 数值型函数
函数名称 作 用
ABS 求绝对值
SQRT 求二次方根
MOD 求余数
CEIL 和 CEILING 两个函数功能相同,都是返回不小于参数的最小整数,即向上取整
FLOOR 向下取整,返回值转化为一个BIGINT
RAND 生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列
ROUND 对所传参数进行四舍五入
SIGN 返回参数的符号
POW 和 POWER 两个函数的功能相同,都是所传参数的次方的结果值
SIN 求正弦值
ASIN 求反正弦值,与函数 SIN 互为反函数
COS 求余弦值
ACOS 求反余弦值,与函数 COS 互为反函数
TAN 求正切值
ATAN 求反正切值,与函数 TAN 互为反函数
COT 求余切值

 

MySQL 字符串函数
函数名称 作 用
LENGTH 计算字符串长度函数,返回字符串的字节长度
CONCAT 合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个
INSERT 替换字符串函数
LOWER 将字符串中的字母转换为小写
UPPER 将字符串中的字母转换为大写
LEFT 从左侧字截取符串,返回字符串左边的若干个字符
RIGHT 从右侧字截取符串,返回字符串右边的若干个字符
TRIM 删除字符串左右两侧的空格
REPLACE 字符串替换函数,返回替换后的新字符串
SUBSTRING 截取字符串,返回从指定位置开始的指定长度的字符换
REVERSE 字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串

 

MySQL 日期和时间函数
函数名称 作 用
CURDATE 和 CURRENT_DATE 两个函数作用相同,返回当前系统的日期值
CURTIME 和 CURRENT_TIME 两个函数作用相同,返回当前系统的时间值
NOW 和  SYSDATE 两个函数作用相同,返回当前系统的日期和时间值
UNIX_TIMESTAMP 获取UNIX时间戳函数,返回一个以 UNIX 时间戳为基础的无符号整数
FROM_UNIXTIME 将 UNIX 时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数
MONTH 获取指定日期中的月份
MONTHNAME 获取指定日期中的月份英文名称
DAYNAME 获取指定曰期对应的星期几的英文名称
DAYOFWEEK 获取指定日期对应的一周的索引位置值
WEEK 获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1〜53
DAYOFYEAR 获取指定曰期是一年中的第几天,返回值范围是1~366
DAYOFMONTH 获取指定日期是一个月中是第几天,返回值范围是1~31
YEAR 获取年份,返回值范围是 1970〜2069
TIME_TO_SEC 将时间参数转换为秒数
SEC_TO_TIME 将秒数转换为时间,与TIME_TO_SEC 互为反函数
DATE_ADD 和 ADDDATE 两个函数功能相同,都是向日期添加指定的时间间隔
DATE_SUB 和 SUBDATE 两个函数功能相同,都是向日期减去指定的时间间隔
ADDTIME 时间加法运算,在原始时间上添加指定的时间
SUBTIME 时间减法运算,在原始时间上减去指定的时间
DATEDIFF 获取两个日期之间间隔,返回参数 1 减去参数 2 的值
DATE_FORMAT 格式化指定的日期,根据参数返回指定格式的值
WEEKDAY 获取指定日期在一周内的对应的工作日索引

 

MySQL 聚合函数
函数名称 作用
MAX 查询指定列的最大值
MIN 查询指定列的最小值
COUNT 统计查询结果的行数
SUM 求和,返回指定列的总和
AVG 求平均值,返回指定列数据的平均值

 

MySQL 流程控制函数
函数名称 作用
IF 判断,流程控制
IFNULL 判断是否为空
CASE 搜索语句

 

 

最后修改于 2021-09-28 09:04:54
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇