(七)函数

函数是指一段可以直接被另一段程序调用的程序或代码

比如:

数据库表中,存储的是入职日期,如2001-11-12,如何快速计算入职天数?

数据库表中,存储的是学生的分数值,如98、75,如何快速判定分数的等级?

1.字符串函数

sql 复制代码
-- 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  mysql ');

-- subtring
select substring('hello mysql', 1, 5);

案例:

sql 复制代码
-- 1.由于业务需求变更,企业员工的工号,统一为5位数,目前不足五位数的全部在前面补0, 比如1号员工的工号应该为00001
update emp set workno = lpad(workno, 5, '0');

2.数值函数

sql 复制代码
-- 数值函数
-- ceil
select ceil(1.1);

-- floor
select floor(1.9);

-- mod
select mod(3, 4);

-- rand
select rand();

-- round
select round(2.345, 2);

案例:

sql 复制代码
-- 通过数据库的函数,生成一个六位数的随机验证码
select lpad(round(rand()*1000000, 0), 6, '0');

3.日期函数

sql 复制代码
-- 日期函数
-- curdate
select curdate();

-- curtime
select curtime();

-- now
select now();

-- YEAR MONTH DAY
select year(now());

select month(now());

select day(now());

-- date_add
select date_add(now(), interval 70 YEAR );
select date_add(now(), interval 70 month );
select date_add(now(), interval 70 day );

-- datediff
select datediff('2021-01-06', '2021-01-01');

案例:

sql 复制代码
-- 查询所有员工的入职天数,并根据入职天数倒序排序。
select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by entrydays desc ;

4.流程函数

sql 复制代码
-- 流程控制函数
-- if
select if(false, 'ok', 'error');

-- ifnull
select ifnull('ok', 'default');
select ifnull('', 'default');
select ifnull(null, 'default');

-- case when then else end
-- 需求:查询emp表的员工姓名和工作地址(北京/ 上海 -----》 一线城市 , 其他 --------》 二线城市)
select
    name,
    (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;

案例:

sql 复制代码
-- 案例:统计班级各个学员的成绩,展示的规则如下:
-- >= 85, 展示优秀
-- >= 60, 展示及格
-- 否则, 展示不及格

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', 50,68,69),
                                                        (2,'MARY',80,81,82),
                                                        (3,'JACK',70,71,72);

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;
相关推荐
欢呼的太阳3 小时前
数据库设计Step by Step (10)——范式化
服务器·数据库·oracle
私人珍藏库3 小时前
[Android] PeakFinder AR v4.8.89 (山峰全景识别+增强现实山峰查看器)
android·人工智能·智能手机·ar·工具·软件
researcher-Jiang3 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
喜欢的名字被抢了4 小时前
MySQL基础入门:从零理解数据库与SQL
数据库·mysql·教程
alexhilton4 小时前
Kotlin DSL深度解析:从Gradle脚本到构建你自己的DSL
android·kotlin·android jetpack
烽火聊员5 小时前
查看Android Studio错误日志
android·ide·android studio
Elastic 中国社区官方博客5 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
DLYSB_5 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
儒雅的大叔5 小时前
MySQL数据库InnoDB数据恢复工具使用总结
数据库·mysql·adb
观远数据6 小时前
ChatBI选型对比:从意图识别到SQL修复,六个维度打分决定是否值得投产
数据库·人工智能·sql