目录
函数
函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在MySQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。
字符串函数
字符串中内置了很多字符串函数,常用的几个如下:
函数 | 功能 |
concat ( s1 , s2 , .... ,sn ) | 字符串拼接,将s1,.... ,sn拼接为一个字符串 |
lower(str) | 将str转为小写 |
upper(str) | 将str转为大写 |
lpad( str , n , pad) | 左填充,用pad对str的左边进行填充,达到n个长度 |
rpad( str , n , pad ) | 右填充,用pad对str的右边进行填充,达到n个长度 |
trim (str) | 去掉字符串头尾空格(不包括中间) |
substring( str , start , len) | 返回字符串str从start位置起的len个长度的字符串 |
演示如下:
#字符串函数
#--concat 拼接
select concat('Hello',' Mysql');
#转化为小写
select lower('Hello');
#转化为大写
select upper('Hello');
#左补齐 直到n
select lpad('01',5,'-');
#右对齐
select rpad('01',5,'-');
#去除头尾空格
select trim(' Hello Mysql ');
#截取
select substring('hello mysql',1,5);
update emp02 set workno = lpad (workno,5,'0');
数值函数
常见的数值函数如下:
函数 | 功能 |
ceil ( x ) | 向上取整 |
floor( x ) | 向下取整 |
mod( x , y ) | 返回x/y的模 |
rand ( ) | 返回0 ~ 1的随机数 |
round( x , y ) | 求参数x 的四舍五入的值,保留y位小数 |
演示如下:
#数值函数
#向上取整
select ceil(1.1);
#向下取整
select floot(1.9);
#取模
select mod(7,4);
#随机数
select rand();
#保留小数位数,四舍五入
select round(2.344,2);
#生成一个六位随机验证码
select rpad(round(rand()*1000000,0),6,'0');
日期函数
常见的日期函数:
函数 | 功能 |
curdate() | 返回当前日期 |
curtime() | 返回当前时间 |
now() | 返回当前日期和时间 |
year( date) | 获取指定date的年份 |
month(date) | 获取指定date的月份 |
day(date) | 获取指定date的日期 |
date_add( date , INTERVAL expr type) | 返回一个日期/时间值加上一个时间间隔expr后的时间 |
datediff( date1 , date2 ) | 返回起始时间date1 和 结束时间date2之间的时间 |
演示如下:
#日期函数
#curdate() 当前日期
select curdate();
#curtime() 当前时分秒
select curtime();
# now()返回当前时间
select now();
#Year Month Day
select year(now());
select month(now());
select day(now());
#date_add 返回往后推70天、70月、70年
select date_add(now(),interval 70 day);
select date_add(now(),interval 70 month);
select date_add(now(),interval 70 year);
#datediff 指定俩个时间间隔天数(前-后)
select datediff('2022-04-01','2022-04-22');
#按截至现在入职天数进行倒序排序
select name,datediff(curdate(),entrydate) as '入职天数' from emp02 order by 入职天数 desc;
流程函数
流程函数也是很常用的一类函数,可以在
SQL
语句中实现条件筛选,从而提高语句的效率
函数 | 功能 |
IF ( value , t , f ) | 如果value为true,则返回t,否则返回f |
IFNULL( value1, value2) | 如果value1不为空则返回value1,否则返回valus2 |
CASE WHEN [ vall ] THEN [ res1 ] ... ELSE [ default ] END | 如果vall为true,返回res1, ... |
CASE [ expr ] WHEN [ vall ] THEN [ res1 ] ... ELSE [ default ] END | 如果expr的值等于vall,返回res1, ...否则返回default默认值 |
演示如下:
#流程控制函数
-- if
select if(false,'ok','Error');
-- ifnull
select ifnull('ok','Default');
select ifnull(null,'Default');
-- case when then else end
-- 需求:查询表中员工姓名和工作地址(北京/上海 ---> 一线城市,其他---->二线城市)
select name,(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else
'二线城市' end) '工作地址' from emp02;
create table score(
id int comment 'ID',
name varchar(20) comment '姓名',
math int comment '数学',
english int comment '英语',
chinese int comment '语文' ) comment '学员成绩表';
select * from score;
insert into score(id, name, math, english, chinese) VALUES (1, 'Tom', 67, 88, 95 ), (2, 'Rose' , 23, 66, 90),(3, 'Jack', 56, 98, 76);
select
id,
name,
(case when math>=85 then '优秀' when math>=60 then '合格' else '不及格' end ) '数学',
(case when english>=85 then '优秀' when english>=60 then '合格' else '不及格' end ) '英语',
(case when chinese>=85 then '优秀' when chinese>=60 then '合格' else '不及格' end ) '语文'from score;
管理用户
查询用户
select * from mysql.??( 该数据库名)
注意事项:
- 在Mysql中需要通过用户名@主机名的方式,来唯一标识一个用户
- 主机名可以使用 % 通配
- 这类SQL开发人员操作的比较少,主要是DBA( Datebase Administrator 数据库管理员)使用
演示如下:
#DCL用户管理
#创建用户 itcast,只能在当前主机localhost访问,密码123456
create user 'itcars'@ 'localhost'identified by '123456';
create user 'itcart'@'localhost'identified by '123456';
#创建用户Jay,可以在任意主机访问该数据库
create user 'Jay'@'%' identified by '123456';
#修改用户Jay的访问密码
alter user 'Jay'@'%' identified with mysql_native_password by '1234';
#删除itcars@localhost
drop user 'itcars'@'localhost';
#查询权限
show grants for 'Jay'@'%';
#授予权限 *.*所有权限
grant all on dbesxt00001.*to'Jay'@'%';
#撤销权限
revoke all on dbesxt00001.* from 'Jay'@'%';