5.4 进阶4:常见函数
Posted qifanren
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.4 进阶4:常见函数相关的知识,希望对你有一定的参考价值。
5.4 进阶4:常见函数
- 功能:类似于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名称
- 好处:
- 隐藏了实现细节
- 提高了代码的重用性
- 调用:select 函数名 (实参列表)
- 特点:
- 叫什么(函数名)
- 干什么(函数功能)
- 分类:
- 单行函数::如concat、ifnull等
- 分组函数:做统计使用,又成为统计函数
5.4.1 单行函数
5.4.1.1 字符函数
-
length函数获取参数值的字节个书
select length(\'张三丰hahahah\');
-
concat拼接
select concat(last_name,\'_\',first_name) 姓名 from employees;
-
substr截取子串
- 注意:索引从1开始的
# 截取末尾
select substr(\'李莫愁爱上了路展元\',6) out_put;
路展元
# 从中间截取
select substr(\'李莫愁爱上了路展元\',1,3) out_put;
李莫愁
# 姓名中首字母大写,其他字符小写,然后用_拼接,显示出来
select concat(upper(substr(last_name,1,1)),\'_\',lower(substr(last_name,2))) 姓名 from employees;
- instr返回子串第一次出现的索引
# 返回字符串的起始索引,如果找不到返回0
select instr(\'杨不悔爱上殷六侠\',\'殷六侠\') as out_put;
殷六侠
-
upper转换成大写
select lower(\'john\')
-
lower转换成小写
select lower(\'JOHN\')
#将姓变成大写,名变成小写,然后拼接 select concat(upper(first_name),\'_\',lower(first_name)) 姓名 from employees;
-
trim去前后指定的空格和字符
select trim(\' 张翠山 \') as out_put;
张翠山
# 去除字符
select trim(\'a\' from \'aaaaaa张aaaaaaa翠aaaaaaa山aaaaaaa \') as out_put;
张aaaaaaa翠aaaaaaa山aaaaaaa
- ltrim去左边空格
- rtrim去右边空格
- replace替换
select replace(\'张无忌爱上了周芷若\',\'周芷若\',\'赵敏\') as out_put;
张无忌爱上了赵敏
- lpad左填充:用指定的字符左填充指定的总长度
select lpad(\'殷素素\', 10,\'10\') as out_put;
1010101殷素素
- rpad右填充
5.4.1.2 数学函数
# round 四舍五入
select round(-1.45);
-1
select round(-1.65);
2
select round(-1.6545,2);
-1.65
# rand 随机数
# floor向下取整
select floor(-1.52);
-2
# ceil向上取整,返回大于等于该参数的最小整数
select ceil(1.52);
2
# mod取余
select mod(10,3);
1
# truncate截断: 取小数点后的位数
select truncate(1.6999999,1);
1.6
5.4.1.3 日期函数
# now当前系统日期+时间
select now();
2021-05-13 17:59:16
# curdate当前系统日期
select curdate();
# curtime当前系统时间
select curtime();
# 获取指定的部份,年year、月month、日day、小时hour、分钟minute、秒second
select year(now());
# 以英文格式返回月份
select monthname(now()); # 出现英文的月份
may
select month(now());
5
# 返回两个日期相差的天数
select datediff
# str_to_date 将各种格式的日期字符,转换成标准日期表示
# 注意后面的格式是用来解析前面的日期的,并不是最终的输出格式
select str_to_date(\'9.13.2021\',\'%m.%d.%Y\');
2021-09-13
# date_format将日期转换成字符,转换要求需要的表示格式
select date_format(now(),\'%y年%m月%d日\');
21年05月13日
select date_format(now(),\'%y年%c月%d日\');
21年5月13日
select date_format(now(),\'%Y年%m月%d日\');
2021年05月13日
select date_format(now(),\'%m月/%d日 %y年\');
05月/13日 21年
# 查询入职日期为1992-4-3的员工信息
select * from employees where hiredate = \'1992-04-03\';
# 查询有奖金的员工名和入职日期(xx月/xx日 xx年)
select last_name, date_format(hiredate,\'%m月/%d日 %y年\') 入职日期
from employees
where commission_pct is not null;
5.4.1.4 流程控制函数
- if 处理双分支:if else的效果
select if(10>5,\'大\',\'小\')
select last_name, commission_pct, if(commission_pct is null,\'没奖金\',\'有奖金\') 备注
from employees;
- case语句情况1:处理等值判断
- 案例查询员工的工资,要求:
- 部门号=30,显示的工资为1.1倍
- 部门号=40,显示的工资为1.2倍
- 部门号=50,显示的工资为1.3倍
- 其他部门,显示的工资为原工资
- 案例查询员工的工资,要求:
# 代码结构
select 下面要用到的字段或表达式
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
# 案例代码
select salary 原始工资,department_id,
case department_id
when 30 then salary*1.1
when 40 then salary*1.2
when 50 then salary*1.3
else salary
end as 新工资
from employees
order by department_id;
- case语句情况2:处理条件判断
- 案例:查询员工的工资情况
- 如果工资>20000,显示A级别
- 如果工资>15000,显示B级别
- 如果工资>10000,显示C级别
- 否则,显示D级别
- 案例:查询员工的工资情况
# 代码结构
select 下面要用到的字段或表达式
case
when 条件1 then 要显示的值1或语句1;
when 条件2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
# 案例代码
select salary,
case
when salary > 20000 then \'A\'
when salary > 15000 then \'B\'
when salary > 10000 then \'C\'
else \'D\'
end as 工资级别
from employees
5.4.1.5 其他函数
select version()
查看当前version版本select database()
查看database当前库select user()
查看user当前连接用户select password(\'字符\')
返回该字符的密码形式select md5(\'字符\')
返回该字符的md5加密形式
5.4.2 分组函数
5.4.2.1 简单应用
sum 求和、max 最大值、min 最小值、avg 平均值、count 计数(group by 后面的那个变量的个数)
select sum(salary) from employees;
select max(salary) from employees;
select min(salary) from employees;
select avg(salary) from employees;
select count(salary) from employees;
select sum(salary) 和, max(salary) 最高, round(avg(salary),2) 平均
from employees
5.4.2.2 分组函数使用注意事项
- sum和avg一般用于处理数值型
- max、min、count可以处理任何数据类型
- 以上五个分组函数都忽略null值
- 都可以搭配distinct使用,用于统计去重后的结果
select sum(distinct,salary) from employees;#去重之后的和
- count的参数可以支持:字段、常量值,一般放1。count(*)的效率最高,建议使用
select count(salsay) from employees;
select count(*) from employees; # 用来统计行数
select count(1) from employees;
select count(\'字段\') from employees;
-
和分组函数一同查询的字段有限制
- 和分组函数一同使用的字段要求是group by后的字段
select avg(salary) department_id from employees;
以上是关于5.4 进阶4:常见函数的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情
ReactNative进阶(二十三):Javascript 严格模式详解
Mysql查询相关知识(进阶三 排序查询,进阶四:常见函数)
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段