MySQL-04-函数
1.函数
判断 null 要用 is 不要用 = 符号
针对
数字
,count()、sum()针对
字符串
,charset()、concat(str1,str2)、ucase()、lcase()、length()、replace(str, old_s, new_s)、substring()、trim符串
1.1 统计函数 - count
count(1)
,统计函数- count(*) 与 count(列名) 区别
- count(*),返回满足条件的记录的行数
- count(列名),统计满足条件的某列有多少个,但是会排除为null的
1 | select count(id) from `student`; |
1.2 合计函数 - sum、avg、max、min
sum(列名)
,当前列数据的和avg(列名)
,当前列数据的平均数max(列名)
,当前列数据的最大数min(列名)
,当前列数据的最小数
1 | select sum(math) from `student`; |
1.3 字符串函数
dual,亚元表,系统表,可以作为测试表
concat(str1, str2, ...)
,拼接字符串1
select concat(name, ' 工作是 ', job) from `emp`;
charset(列名)
,返回编码格式1
select charset(name) from `emp`;
instr(l_str, str)
,截取字符串。返回str,在l_str的第几位开始,默认1开始,无,返回01
select instr('hanshunping', 'ping') from dual;
亚元表,dual是一个系统表,可用于测试
ucase(str)、lcase(str)
,字符串转大写,转小写1
select ucase(name) from `emp`;
left(str, m)、right(str, m)
,从左边截取m位,从右边截取m位1
select left(name, 2) from `emp`;
length(列名)
,计算数据长度,按字节统计,utf8,一个文字占3个字节1
select length(name) from `emp`;
replace(str, old_s, new_s)
,将str中old_s的字段替换为new_s1
select name, replace(job, 'MANAGER', '经理') from `emp`;
strcmp(str1, str2)
,逐字符比较字符串大小。相等.返回0,前面大,返回大于0的数;后面大,返回小于0的数。1
select strcmp('wzh', 'wzh') from dual;
substring(str, start, len)
,截取字符串,从1开始,取出str中,从start位置开始,长度为len的字符串。不添加len,则直接取到结尾1
select substring(name, 1, 2) from `emp`;
trim()
、ltrim、rtrim(),去除两端空格,去除左边空格,去除右端空格,记住trim()即可1
select trim(' wzh ') from dual;
小练习,以首字母小写的方式显示所有员工emp的姓名
1
2
3
4
5
6
7select replace(
name, left(name, 1), lcase(left(name, 1))
) from `emp`;
select concat(
lcase(left(name, 1), substring(name, 2))
) from `emp`;
2.数学相关函数
abs(num)
,绝对值bin(num),十进制转二进制
ceilling(num)
,向上取整,返回比num大1的整数conv(num1, num2, num3),进制转换。num1是num2进制的数,转换为num3进制的数输出
select conv(8, 10, 2) from dual;
floor(num)
,向下取整,返回比num小的最大整数format(num, len)
,四舍五入。将num保留len个小数select format(1.123456, 2) from dual;
结果是1.12
hex(num),转成十六进制
least(num1, num2, num3, …),返回最小值
mod(num, num2),求余。num 除以 num2 的余数
rand([seed]),返回随机数,seed可选。范围0<=num<=1.0.若传递seed,只要seed不变,随机出来的数据就不会改变。
3.时间日期相关函数
- current_date(),当前日期,年月日
date()
,等同current_date()- current_time(),当前时间,时分秒
time()
,等同current_time()- current_timestamp(),当前时间戳,年月日时分秒
now()
,当前时间。与current_timestamp()相同datediff(date1, date2)
,两个日期的差(date1 - date2)
,以天为单位date_add(time, interval num minute)
,在time的基础上进行加操作,如,加上num,minute是分钟。minute可以是年月日时分秒- date_sub(time, interval num minute)
year()、month()、day()
。例如year(now()),返回当前时间的年- last_day(日期),显示当月最后一天。
- 注:实际开发中,也经常使用
int保存unix时间戳
,然后使用form_unixtime()
进行转换,非常有实用价值。如下图
1 | insert into `emp`(id, name, birthday) values |
3.1 小练习
- 算出2011-11-11到2022-11-11相差多少天
1 | select datediff('2011-11-11', '2022-11-11') from dual; |
- 算出活了多少天
1 | select datediff(now(), '1999-11-10') from dual; |
- 加入活到80岁,求还剩多少天
1 | select datediff( |
4.流程控制函数
if()
ifnull()
第一种写法 case when score > 60 then '及格' when score > 80 then '良好' when score > 90 then '优秀' else '不及格' end 第二种写法 case sex when 1 then '男' when 0 then '女' else '空的' end