小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
1.1.4 数据处理函数
-
数据处理函数又被称为单行处理函数
-
特点:一个输入对应一个输出
函数名 函数功能 lower 转换小写 upper 转换大写 substr 取子串(substr(被截取的字符子串,起始下标,截取的长度)) length 取长度 trim 去空格 str_to_date 将字符串转换成日期 date_format 格式化日期 format 设置千分位 round 四舍五入 rand() 生成随机数 ifnull 可以将null转换成一个具体值
// 单行处理函数
1、lower / upper 转换大小写
【案例】:将员工姓名转换成小写
select lower(ename) from emp ;
2、substr 取子串
【格式】:substr(字符串 , 起始下标 , 截取长度) 起始下标从1开始
【案例】:请找出员工名字第一个字母是A的员工信息
select ename from emp where ename like 'a%' ;
select ename from emp where substr(ename , 1 1) = 'A' ; // 注意是一个等号
3、length
【格式】:length(字段名)
【案例】:求取员工姓名的长度,并更名为enamelength
select length(ename) as enamelength from emp ;
4、trim 去空格
【格式】: select 字符段 from 表名 where 字符段 = trim('传过来的数据');
【案例】: 查询king的数据
select * from emp where ename = trim(' king ');
5、str_to_date 将字符串varchar转换成date 类型
【格式】:str_to_date('字符串日期' , '日期格式') ;
日期格式:年月日时分秒分别为: %Y , %m , %d , %h , %i , %s ;
【案例】:向t_user表中插入一个数据,将字符串类型转换成日期类型
insert into t_user (id , name , birth) values (1 , 'zhangsan' , str_to_date('01-10-1990' , '%d-%m-%Y')) ;
【注意】:如果输入的格式是 %Y-%m-%d , 则转换函数可以省略。
6、date_format 将date类型转换成具有一定格式的varchar字符串类型
【格式】:date_format(字段名 ,'日期格式')
【案例】:查询t_user表中的名字和生日
select name , date_format(birth , '%Y-%m') as birth from t_user ;
7、format 数字格式化
【格式】:format (数字 , ‘格式’);
mysql> select empno , ename , Format(sal , '$999,999') from emp ;
+-------+--------+--------------------------+
| empno | ename | Format(sal , '$999,999') |
+-------+--------+--------------------------+
| 7369 | SMITH | 800 |
| 7499 | ALLEN | 1,600 |
| 7521 | WARD | 1,250 |
| 7566 | JONES | 2,975 |
| 7654 | MARTIN | 1,250 |
| 7698 | BLAKE | 2,850 |
| 7782 | CLARK | 2,450 |
| 7788 | SCOTT | 3,000 |
| 7839 | KING | 5,000 |
| 7844 | TURNER | 1,500 |
| 7876 | ADAMS | 1,100 |
| 7900 | JAMES | 950 |
| 7902 | FORD | 3,000 |
| 7934 | MILLER | 1,300 |
+-------+--------+--------------------------+
14 rows in set, 14 warnings (0.06 sec)
8、round 四舍五入(可以有负数,负数表示相应的整数位数 ; 可以有小数,也是四舍五入保留位数 : 0.4 和 0.6 保留的位数就不一样)
【格式】: select round(值, 保留的小数位数) from 表名 ;
【案例】: 测试 1236.567 的四舍五入值
select round(1236.567 , 0) as result from emp ;
9、rand() 生成随机数 , 也会借助表的结构
【格式】: select rand() as result from emp ;
【案例】:生成 100 以内的 随机数
select round(rand() * 100) as result from emp ;
10、ifnull 可以将null转换成一个具体值
【注意】:在数据库之中,只要有null参与的数学运算 , 结果均为null
【格式】:ifnull(数据 , 被当做的值)
【案例】:将null 改为0 , 计算员工的年薪 , 并重命名为yearsal
select ename , (sal + ifnull(comm , 0)) * 12 as yearsal from emp ;
10、concat 字符串拼接
【案例】:将员工的姓名和员工的编号拼接起来
select concat(ename , empno) from emp ;
11、case.. when... then... when... then...else... end ....
【案例】:当员工的岗位是manager的时候,工资上调10% , 当工作岗位是salesman的时候,工资上调50% (注意:不修改数据库)
select ename , job , sal as oldsal ,(case job when 'manager' then sal*1.1 when 'salesman' then sal * 1.5 else sal end) as newsal from emp order by sal asc , ename desc ;
【案例】:将员工信息以首字母大写的形式展现出来
select concat(upper(substr(ename , 1 , 1)) , lower(substr(ename , 2 , length(ename) - 1)) ) as ename from emp ;
1.1.5 分组函数
-
概念:分组函数又被称为聚合函数、多行处理函数
-
特点:多个输入对应一个输出
函数名 函数功能 count 取得记录数 sum 求和 avg 取平均值 max 取最大的数 min 取最小的数 -
注意:
-
1、分组函数在使用的时候必须先进行分组,然后才能用;如果进行分组,整张表为一个组
-
2、分组函数会自动忽略null , 不需要提前进行处理
-
3、分组函数count(*)和count(字段)的区别
- count(具体字段) : 表示统计该字段下所有不为null的元素的总数
- count(*) : 只要有一行数据,count则++
-
4、分组函数不能够直接使用在where子句中
- 执行顺序:from、 where 、 group by、select 、 order by
- 因为执行where 语句的时候 尚未分组 ,所以会报错
-
5、所用的分组函数可以组合起来一起用
-
// 多行处理函数
1、count
【案例】:求出员工数量总和
select count(ename) from emp ;
2、sum
3、avg
4、max
5、min
【案例】:同时计算所有员工的工资总和、最高工资、最低工资、平均工资、总数
select sum(sal) , max(sal) , min(sal) , avg(sal) , count(sal) from emp ;
+----------+----------+----------+-------------+------------+
| sum(sal) | max(sal) | min(sal) | avg(sal) | count(sal) |
+----------+----------+----------+-------------+------------+
| 29025.00 | 5000.00 | 800.00 | 2073.214286 | 14 |
+----------+----------+----------+-------------+------------+