什么是函数?
函数类似于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 ;
常用函数
函数名称 | 作 用 |
---|---|
ABS | 求绝对值 |
SQRT | 求二次方根 |
MOD | 求余数 |
CEIL 和 CEILING | 两个函数功能相同,都是返回不小于参数的最小整数,即向上取整 |
FLOOR | 向下取整,返回值转化为一个BIGINT |
RAND | 生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列 |
ROUND | 对所传参数进行四舍五入 |
SIGN | 返回参数的符号 |
POW 和 POWER | 两个函数的功能相同,都是所传参数的次方的结果值 |
SIN | 求正弦值 |
ASIN | 求反正弦值,与函数 SIN 互为反函数 |
COS | 求余弦值 |
ACOS | 求反余弦值,与函数 COS 互为反函数 |
TAN | 求正切值 |
ATAN | 求反正切值,与函数 TAN 互为反函数 |
COT | 求余切值 |
函数名称 | 作 用 |
---|---|
LENGTH | 计算字符串长度函数,返回字符串的字节长度 |
CONCAT | 合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个 |
INSERT | 替换字符串函数 |
LOWER | 将字符串中的字母转换为小写 |
UPPER | 将字符串中的字母转换为大写 |
LEFT | 从左侧字截取符串,返回字符串左边的若干个字符 |
RIGHT | 从右侧字截取符串,返回字符串右边的若干个字符 |
TRIM | 删除字符串左右两侧的空格 |
REPLACE | 字符串替换函数,返回替换后的新字符串 |
SUBSTRING | 截取字符串,返回从指定位置开始的指定长度的字符换 |
REVERSE | 字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串 |
函数名称 | 作 用 |
---|---|
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 | 获取指定日期在一周内的对应的工作日索引 |
函数名称 | 作用 |
---|---|
MAX | 查询指定列的最大值 |
MIN | 查询指定列的最小值 |
COUNT | 统计查询结果的行数 |
SUM | 求和,返回指定列的总和 |
AVG | 求平均值,返回指定列数据的平均值 |
函数名称 | 作用 |
---|---|
IF | 判断,流程控制 |
IFNULL | 判断是否为空 |
CASE | 搜索语句 |
最后修改于 2021-09-28 09:04:54
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

