写在之前
现在我们进入函数部分。这个MySQL的函数部分,基本就相当于java中的方法。
MySQL函数
好处:
1、隐藏了实现细节
2、提高代码的重用性
调用:
select 函数名(实参列表) 【from 表】;
分类:
1、单行函数
2、分组函数(统计函数)
单行函数
一、字符函数
1、length
:获取参数值的字节个数
eg.
select length('john'); #结果 4
select length('哈哈哈'); #结果 根据编码不同,结果不同
# 注意:在gbk中一个汉字占2个字节,在utf-8中一个汉字占3个字节
2、concat
:拼接字符串
select concat(字符1,'_',字符2) from 表明;
#将查询结果的多个字段连接在一起输出
3.1、upper
:小写变大写
3.2、lower
:大写变小写
eg.
upper('john');
lower('JOHN');
4、substr 或者 substring
select substr('老鼠爱大米',4); #结果 大米
#截取从指定索引处后面所有的字符(包括当前位置)
注意:索引从1开始
select substr('老鼠爱大米',1,2); #结果 老鼠
#截取从指定索引处指定字符长度的字符
5、instr
:返回字串第一次出现的索引,如果找不到返回0
注意:第一次
eg.
select instr('老鼠爱大米','大米'); #结果 4
6、trim
:①去除字符前后的空格
②去除前后的特定字符
注意:只会去除前后的,中间的不管
eg.
去除前后空格
select trim(' 老鼠 '); #结果 老鼠(空格去掉)
去除前后特定字符
select trim('a' from 'aaaaaaaa老aaaa鼠aaaaa'); #结果 老aaaa鼠
7、lpad
:用指定的字符实现左填充指定长度
即:若字符长度不够,左填充指定字符以达到指定长度
若字符长度超过指定长度,会截断(即只显示指定的长度)
select lpad('老鼠爱大米',10,'*'); #结果 *****老鼠爱大米
select lpad('老鼠爱大米',2,'*'); #结果 老鼠
8、rpad
:用指定的字符实现右填充指定长度
同样,若字符长度超过指定长度,会截断(只显示前特定长度的字符)
select rpad('老鼠爱大米',12,'ab'); #结果 老鼠爱大米abababa
select rpad('老鼠爱大米',2,'ab'); #结果 老鼠
9、replace
:替换
select replace(字符1,字符2,字符3);
用字符3去替换字符1中的所有出现的字符2
select replace('老鼠爱大米','老鼠','仓鼠'); #结果 仓鼠爱大米
select replace('老鼠爱大老鼠米老鼠老鼠','老鼠','仓鼠'); #结果 仓鼠爱大仓鼠米仓鼠仓鼠
二、数学函数
1、round
:四舍五入
select round(1.65); #结果 2
select round(1.45); #结果 1
select round(-1.55); #结果 -2
select round(-1.35); #结果 -1
可选择保留几位小数
select round(1.657,2); #结果 1.66
select round(203,2); #结果 203
2、ceil
:向上取整
返回 >= 该参数的最小整数
select ceil(0.01); #结果 1
select ceil(1.00); #结果 1
select ceil(-1.02); #结果 -1
3、floor
:向下取整
返回 <= 该参数的最大整数
select floor(1.02); #结果 1
select floor(9.8); #结果 9
select floor(-9.9); #结果 -10
5、truncate
:截断
只保留小数点指定的位数,不考虑四舍五入
select truncate(1.6999,1); #结果 1.6
注意:截断只保留小数点后几位,此时不用管四舍五入
select truncate(2000,2); #结果 2000
6、mod
:取余
mod(a,b) = a-a/b*b;
select mod(10,3); #结果 1
select 10%3; #结果 1
select mod(-10,3); #结果 -1
select mod(-10,-3); #结果 -1
select mod(10,-3); #结果 1
被除数为正结果为正,被除数为负结果为负
三、日期函数
1、now
:返回当前系统日期+时间
select now();
2、curdate
:返回当前系统的日期,不包含时间
select curdate();
3、curtime
:返回当前系统的时间,不包含日期
select curtime();
4、返回指定部分的 年 月 日 小时 分钟 秒
select year(now()); #结果 返回当前时间的年份
select year('1996-5-3'); #结果 1996
注意:时间格式默认为 年-月-日,中间的分隔符可为 ‘.’ ‘-’ 两个可混用
select month(now()); #结果 返回当前时间的月份
注意:时间格式跟上同
select monthname(now()); #结果 返回当前时间的月份的英语名
select day(now()); #结果 返回当前时间的日,几号
注意:时间格式如上同
select dayname(now()); #结果 返回当前时间的星期,英文
select hour(now()); #结果 返回当前时间的小时数
时间格式:select hour('2000-5-6 13-53-59'); #结果 13
注意:分隔符 ‘.’ ‘-’ 可混用,年月日 和 时间 之间必需要有空格分隔开
select minute('2000-5-6 13-53-59'); #结果 53
select second('2000-5-6 13-53-59'); #结果 59
5.1、str_to_date
:将日期格式的字符转换成指定格式的日期
注意:必需合法的日期格式字符
select str_to_date('1998-3-2','%Y-%c-%d'); #结果 1998-03-02
注意:03是显示效果
5.2、date_format
:将日期转换为字符
select date_format(now(),'%y年%m月%d日');
select date_format('2019-8-9','%y年%m月%d日'); #结果 19年08月09日
附:日期格式
序号 | 格式符 | 功能 |
1 | %Y | 四位的年份 |
2 | %y | 两位的年份 |
3 | %m | 月份(01,02,12) |
4 | %c | 月份(1,2,11,12) |
5 | %d | 日(01,02,03…) |
6 | %H | 小时(24小时制) |
7 | %h | 小时(12小时制) |
8 | %i | 分钟(00,01,02,…59) |
9 | %s | 秒(00,01,…59) |
四、其它函数
1、查询当前版本
select version();
2、查询当前使用库
select database();
3、查询当前用户
select user();
五、流程控制函数
1、if 函数: if else 的效果
select if(10>5,'大','小'); #结果:大
select if(10<5,'大','小'); #结果:小
select if(判断条件,执1,执2);
若判断条件成立,输出执1,不成立输出执2
2.1、case函数的使用一: switch case 效果
等值判断
case 要判断的字段或表达式
when 常量1 then 要显示的值1或 语句1;
when 常量2 then 要显示的值2或 语句2;
...
else 要显示的值n或语句n;
end
#注意:当then是要显示时,不加分号
可配合select做表达式也可单独做一条语句
2.2、case函数的使用二: 类似 多重if
区间判断
case
when 条件1 then 要显示的值1或 语句1;
when 条件2 then 要显示的值2或 语句2;
...
else 要显示的值n或 语句n;
end
分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:
sum() 求和
avg() 平均值
max() 最大值
min() 最小值
count() 计算个数
#注意
count() 计算非空的值的个数
sum() , avg() 一般用于处理数值型
max() , min() , count() 可以处理任何类型
以上五种类型都忽略 null 值(即null值不进行处理)
搭配 distinct 进行去重后操作
select sum(distinct TY); #对TY去除重复值后再进行求和
其它四类也可一样操作