文章目录
单行处理函数
所用到的表
特点
单行处理函数/数据处理函数的特点:一个输入对应一个输出。和单行处理函数相对应的是多行处理函数(多行处理函数的特点是多个输入对应一个输出)
常见的单行处理函数
lower | 转换小写 |
upper | 转换大写 |
substr | 取子串(substr(被截取的字符串,起始下标,截取的长度)) |
length | 取长度 |
trim | 去空格 |
str_to_date | 将字符串转换成日期 |
date_format | 格式化日期 |
format | 设置千分位 |
round | 四舍五入 |
rand() | 生成随机数 |
ifnull | 可以将null转换成一个具体值 |
concat | 字符串拼接 |
case…when…then…when…then…else…end | 当什么时候怎么做 |
lower
lower,转换小写,upper效果与其相反
查询员工姓名并将其转为小写
select lower(ename) from emp;
substr
substr 取子串(substr(被截取的字符串,起始下标,截取的长度))
查询员工的姓名但只截取其姓名的第一位进行显示
当我们使用下标从0开始时,所截去的字符串为空,说明在数据库中,起始的下标地址为1
select substr(ename,0,1) as ename from emp;
select substr(ename,1,1) as ename from emp;
进行查询员工名字第一个字母是’A’的
第一种方式:
select ename from emp where ename like 'A%';
第二种方式:
select ename from emp where substr(ename,1,1)='A';
length
length 取长度
查询员工姓名并使用length函数取其长度
select length(ename) as ename from emp;
concat
concat 字符串拼接
查询员工编号及姓名并将其拼接到一起,组成一个字段
select concat(empno,ename) as result from emp;
使用lower、length、concat结合将名字的首字母变小写
select concat(lower(substr(ename,1,1)),substr(ename,2,length(ename)-1)) as result from emp;
trim
trim 去除字符串前后空白
select * from emp where ename=' king '; 查不出数据
select * from emp where ename=trim(' king '); 去除前后空格后可以查出数据
str_to_date
str_to_date:将字符串varchar类型转换为date类型
创建一个表,其中设置birth属性,其类型为date日期类型
create table t_user(
id int,
name varchar(32),
birth date
);
向数据库中插入数据
当我们严格按照日期的格式去书写时,mysql会自动做类型转换,可以插入成功
insert into t_user(id,name,birth) values(1,'张三','1999-05-03'); 成功
insert into t_user(id,name,birth) values(2,'李四','03-05-1999'); 失败
要想将’03-05-1999’作为日期类型插入数据库,需要使用到str_to_date()函数,其语法格式为
str_to_date(‘字符串日期’,‘日期格式’)
mysql的日期格式:
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
insert into t_user(id,name,birth) values(2,'李四',str_to_date('03-05-1999','%d-%m-%Y'));
date_format
date_format:将date类型转换为具有一定格式的varchar字符串类型
当我们成功将date数据插入到数据库中后,想要将其取出查看并按照一定的格式进行展示,需要使用到date_format()函数,这个函数可以将日期类型转换为特定格式的字符串。
select id,name,date_format(birth,'%m/%d/%Y') as birth from t_user;
当我们直接取日期,不使用date_format函数进行格式化时,MySQL也会自动将其格式化为’%Y-%m-%d’格式
select id,name,birth from t_user;
format
format 设置千分位
select ename,format(sal,'$999,999') from emp;
小知识
当我们在select后面跟字面量或字面值时,有几行数据生成几行
select 'acb' as bieming from emp;
select 1000 as biming from emp;
select可以跟某个表的字段名(等同于变量),也可以跟字面量/字面值(数据)。
round
round (进行四舍五入的数字,要保留的小数的位数)
select round(1236.567,0) as result from emp;
select round(1236.567,1) as result from emp;
select round(1236.567,2) as result from emp;
当要保留的小数的位数为-1、-2时
select round(1236.567,-1) as result from emp;
select round(1236.567,-2) as result from emp;
rand()
rand() 生成随机数
select rand() from emp;
生成100以内的随机数
select round(rand()*100,0) from emp;
ifnull
ifnull 将null转换为具体的值
在数据库中,有null参与的数学运算结果都为null
计算员工的薪资加津贴,津贴为null的员工的结果都为null
ifnull函数的用法:ifnull(数据,被当作的值),如果数据为null时,自动将其转换为我们所设置的
select ename,(sal+ifnumm(comm,0)) from emp;
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;