常用的数学函数如表示所示
数学函数 描述
abs(x) 返回x的绝对值
rand() 返回0到1的随机数
mod(x,y) 返回x除以y以后的余数
power(x,y) 返回x的y次方
round (x) 返回离x最近的整数
round (x,y) 保留x的y位小数四舍五入后的值
sqrt(x) 返回x的平方根
truncate(x,y) 返回数字x截断为y位小数的值
ceil(x) 返回大于或等于x的最小整数
floor(x) 返回小于或等于x的最大整数
greatest (x1,x2...) 返回集合中最大的值
least(x1,x2...) 返回集合最小的值
离2.59最近的整数
mysql> select round (2.59);
1.299保留小数点后2位,这里会四舍五入
mysql> select round(1.299,2);
返回平方根
mysql> select sqrt(8);
保留小数点后2位,但truncate函数不会四舍五入
mysql> select truncate(2.496,2);
返回大于或等于6.2的最小整数
mysql> select ceil (6.2);
返回小于或等于6.2的最大整数
mysql> select floor(6.2);
返回最大值
mysql> select greatest(1,2,3);
返回最小值
mysql> select least(1,2,3);
聚合函数
数据库函数中专门有一组函数是特意为库内记录求和或者对表中的数据进行集中概括而设计的,这些函数被称作聚合函数。
聚合函数 描述
avg() 返回指定列的平均值
count() 返回指定列中非NULL值的个数
min() 返回指定列的最小值
max() 返回指定列的最大值
sum(x) 返回指定列的所有值之和
返回分数的总和
mysql> select sum(score) from info;
返回分数字段的个数
mysql> select count(score) from info;
返回分数的最小值
mysql> select min(score) from info;
返回分数的平均值
mysql> select avg(score) from info;
字符串函数
字符串函数 描述
length (x) 返回字符串x的长度
trim () 返回去除指定格式的值
concat (x,y) 将提供的参数x和 y拼接成一个字符串
upper (x) 将字符串x的所有字母变成大写字母
lower (×) 将字符串×的所有字母变成小写字母
left (x, y) 返回字符串x的前y个字符
right (x, y) 返回字符串x的后y个字符
repeat (x, y) 将字符串x重复y次
space (x) 返回x个空格
replace (x,y,z) 将字符串 z替代字符串 x中的字符串y
strcmp (x,y) 比较x和y,返回的值可以为-1,0,1
substring (x,y,z) 获取从字符串 x中的第y个位置开始长度为z的字符串
reverse (×) 将字符串x反转
length(x)返回字符串x的长度
返回abcd的长度,空格也算一个字符
mysql> select length('abcd');
mysql> select length('ab cd');
trim()返回去除格式的值
mysql> select trim(' li');
concat(x,y)将提供的参数x和y拼接成一个字符串
mysql> select concat('abc','def');
还可以结合其他函数,如trim(将后面的函数删除格式)
mysql> select concat('abc',trim(' def'));
upper(x)将字符串x的所有字母变成大写字母
mysql> select upper('abc');
lower(x)将字符串x的所有字母变成小写字母
mysql> select lower('abc');
left(x,y)返回字符串x的前提y个字符
mysql> select left('abcdefg',4);
right(x,y)返回字符串x的后y个字符
mysql> select right('abcdefg',4);
把字符串的前3个字母和后3个字母拼接起来
mysql> select concat(left('abcdef',4),right('abcdef',4));
repeat(x,y)将字符串x重复y次
mysql> select repeat('abc',3);
space(x)返回x个空格
mysql> select length(space(4));
replace(x,y,z)将字符串z替代字符串x中的字符串y
mysql> select replace('hello','ll','cc');
substring(x,y,z)获取从字符串x中的第y个位置开始长度为z的字符串返回从字符串中第三个字符开始的4个字符
mysql> select substring('abcdefg',4,5);
strcmp(x,y)比较x和y,返回的值可以为-1,0,1
mysql> select strcmp(18,19);
mysql> select reverse('gfedcba');
返回字符串的前4个字符,然后反转输出
mysql> select reverse(left('gfedcba',4));
先将字符串反转,再输出前4个字符
mysql> select left(reverse('gfedcba'),4);
日期时间函数
字符串函数 描述
curdate () 返回当前时间的年月日
curtime () 返回当前时间的时分秒
now () 返回当前时间的日期和时间
month (x) 返回日期x中的月份值
week (×) 返回日期x是年度第几个星期
hour (x) 返回x中的小时值
minute (×) 返回x中的分钟值
second (x) 返回x中的秒钟值
dayofweek (×) 返回x是星期几,1星期日,2星期一
eplace (x, y,z) 将字符串 z替代字符串 x中的字符串
ydayofmonth (x) 计算日期x是本月的第几天
dayofyear (x) 计算日期x是本年的第几天
返回年月日
mysql> select curdate();
返回当前时间
mysql> select curtime();
返回当前完整时间
mysql> select now();
返回月份
mysql> select month('2021-07-17');
返回当前日期是一年中的第几周
mysql> select week('2021-07-17');
返回当前时间的小时
mysql> select hour(curtime());
返回当前时间的分钟
mysql> select minute(curtime());
返回当前时间的秒
mysql> select second(curtime());
当前是星期几
mysql> select dayofweek(curdate());
当前日期是本月的第几天
mysql> select dayofmonth(curdate());
当前日期是今年的第几天
mysql> select dayofyear(curdate());
存储过程
概述
前面学习的 MysQL相关知识都是针对一个表或几个表的单条soL,语句,使用这样的sQL
语句虽然可以完成用户的需求,但在实际的数据库应用中,有些数据库操作可能会非常复杂,可能会需要多条sQL语句一起去处理才能够完成,这时候就可以使用存储过程,轻松而高效的去完成这个需求,有点类似shell脚本里的函数
存储过程的优点:
(1)执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
(2 ) sQL语句加上控制语句的集合,灵活性高
(3)在服务器端存储,客户端调用时,降低网络负载
(4)可多次重复被调用,可随时修改,不影响客户端调用
(5)可完成所有的数据库操作,也可控制数据库的信息访问权限
创建存储过程
mysql> delimiter $$
mysql> create procedure a()
-> begin
-> select * from info;
-> update info set score=333 where name='lisi';
-> select * from info;
-> end $$
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> call a();
mysql> show create procedure a\G
存储过程的参数
IN输出参数:表示调用者向过程传入值(传入值可以是字面量或变量)
out输出参数:表示过程向调用者传入出值(可以返回多个值)(传出值只能是变量)
INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
mysql> delimiter @@
mysql> create procedure proc (in inname varchar(40))
-> begin
-> select * from infos where name=inname;
-> end @@
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> select * from infos;
删除存储过程
mysql> drop procedure if exists proc;
Query OK, 0 rows affected (0.00 sec)