SQL函数用法及实例

select database();
# MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。
# 1.字符串函数
# concat:字符串拼接
select concat('hello', 'mysql');
# lower:全部转小写
select lower('Hello');
# upper:全部转大写
select upper('Hello');
# lpad : 左填充
select lpad('01', 5, '-');
# rpad:右填充
select rpad('01',5,'-');
# trim : 去除空格(去掉字符串头部和尾部的空格)
select trim('hello  world  ');
#  substring : 截取子字符串 (返回从字符串str从start位置起的len个长度的字符串)
select substring('Hello mysql',1, 3);

# 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员
# 工的工号应该为00001。
# DML Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进
# 行增、删、改操作。
update emp set workno = lpad(workno, 5, '0');

# 2.数值函数
#  ceil:向上取整
select ceil(1.1);
# floor:向下取整
select floor(1.1);
# mod:取模(MOD(x,y)返回x/y的模)
select mod(6, 4);
# rand:获取随机数(0-1);
select rand();
# round:四舍五入(ROUND(x,y) 求参数x的四舍五入的值,保留y位小数)
select round(3.445, 2);

# 通过数据库的函数,生成一个六位数的随机验证码。
# 思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础
# 上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0
select lpad(round(rand()*1000000, 0), 6, '0');

# 3.日期函数
#  curdate:当前日期
select curdate();
# curtime:当前时间
select curtime();
# now:当前日期和时间
select now();
#  YEAR , MONTH , DAY:当前年、月、日
select YEAR(now());
select MONTH(now());
select DAY(now());
# date_add:增加指定的时间间隔
# DATE_ADD(date, INTERVAL expr type)
# 返回一个日期/时间值加上一个时间间隔expr后的时间值
select date_add(now(), interval 70 YEAR );
# DATEDIFF(date1,date2)返回起始时间date1 和 结束时间date2之间的天数
select datediff('2021-10-01', '2021-12-01');

# 查询所有员工的入职天数,并根据入职天数倒序排序。
select name, datediff(now() , entrydate) as '入职天数'
from emp
order by 入职天数 desc;

# 4.流程函数
# 流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。
# IF(value , t , f)
# 如果value为true,则返回t,否则返回f
# IFNULL(value1 , value2)
# 如果value1不为空,返回value1,否则返回value2
# CASE WHEN [ val1 ] THEN [res1] ...
# ELSE [ default ] END
# 如果val1为true,返回res1,... 否则返回default默认值
# CASE [ expr ] WHEN [ val1 ] THEN
# [res1] ... ELSE [ default ] END
# 如果expr的值等于val1,返回res1,... 否则返回default默认值

# A. if
select if(false, 'ok','error');
# B. ifnull
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');
#  case when then else end
# 需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)
select name, workaddress,
       (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;


create table score(
id int comment 'ID',
name varchar(20) comment '姓名',
math int comment '数学',
english int comment '英语',
chinese int comment '语文'
) comment '学员成绩表';
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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值