目錄
一、字符串函數
1.常見字符串函數
?編輯?2.字符串函數的基本使用
3.字符串函數的數據庫案例演示
二、數值函數
1.常見數值函數(如下):
?2.數值函數的基本使用
3.數值函數的數據庫案例演示
三、日期函數
1.常見的日期函數
2.日期函數的基本使用
3.日期函數的數據庫案例演示?
四、流程函數?
1.常見的流程函數
?2.流程函數的基本使用
3.流程函數的數據庫案例演示
函數是指一段可以直接被另一段程序調用的程序或代碼。 也就意味著,這一段程序或代碼MySQL中已經給我們提供了,我們要做的就是在合適的業務場景調用對應的函數完成對應的業務需求即可。
一、字符串函數
1.常見字符串函數
MySQL中內置了很多字符串函數,常用的幾個如下:
?2.字符串函數的基本使用
案例如下:
A. concat : 字符串拼接
select concat('Hello' , ' MySQL');B. lower : 全部轉小寫
select lower('Hello');C. upper : 全部轉大寫
select upper('Hello');D. lpad : 左填充
select lpad('01', 5, '-'); -- ---01E. rpad : 右填充
select rpad('01', 5, '-'); -- 01---F. trim : 去除空格
select trim(' Hello MySQL '); -- Hello MySQLG. substring : 截取子字符串
select substring('Hello MySQL',1,5); --Hello
3.字符串函數的數據庫案例演示
?題目要求:由于業務需求變更,企業員工的工號,統一為5位數,目前不足5位數的全部在前面補0。比如: 1號員 工的工號應該為00001。
首先創建員工數據庫(代碼如下):
create table emp(id int comment '編號',workno varchar(10) comment '工號',name varchar(10) comment '姓名',gender char(1) comment '性別',age tinyint unsigned comment '年齡',idcard char(18) comment '身份證號',workaddress varchar(50) comment '工作地址',entrydate date comment '入職時間')comment '員工表';INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (1, '00001', '柳巖', '女', 20, '123456789012345678', '北京', '2000-01-01'),(2, '00002', '張無忌', '男', 18, '123456789012345670', '北京', '2005-09-01'),(3, '00003', '韋一笑', '男', 38, '123456789712345670', '上海', '2005-08-01'),(4, '00004', '趙敏', '女', 18, '123456757123845670', '北京', '2009-12-01'),(5, '00005', '小昭', '女', 16, '123456769012345678', '上海', '2007-07-01'),(6, '00006', '楊逍', '男', 28, '12345678931234567X', '北京', '2006-01-01'),(7, '00007', '范瑤', '男', 40, '123456789212345670', '北京', '2005-05-01'),(8, '00008', '黛綺絲', '女', 38, '123456157123645670', '天津', '2015-05-01'),(9, '00009', '范涼涼', '女', 45, '123156789012345678', '北京', '2010-04-01'),(10, '00010', '陳友諒', '男', 53, '123456789012345670', '上海', '2011-01-01'),(11, '00011', '張士誠', '男', 55, '123567897123465670', '江蘇', '2015-05-01'),(12, '00012', '常遇春', '男', 32, '123446757152345670', '北京', '2004-02-01'),(13, '00013', '張三豐', '男', 88, '123656789012345678', '江蘇', '2020-11-01'),(14, '00014', '滅絕', '女', 65, '123456719012345670', '西安', '2019-05-01'),(15, '00015', '胡青牛', '男', 70, '12345674971234567X', '西安', '2018-04-01'),(16, '00016', '周芷若', '女', 18, null, '北京', '2012-06-01');
實現代碼如下:
update emp set workno = lpad(workno, 5, '0');
二、數值函數
1.常見數值函數(如下):
?2.數值函數的基本使用
A. ceil:向上取整
select ceil(1.1); -- 2B. floor:向下取整
select floor(1.9); -- 1C. mod:取模
select mod(7,4); -- 3 求余D. rand:獲取隨機數
select rand(); -- 0-1之間 [0, 1)E. round:四舍五入
select round(2.344,2); -- 對前面的數進行四舍五入,保留兩位小數
3.數值函數的數據庫案例演示
案例: (演示的表與一.3的案例同樣)通過數據庫的函數,生成一個六位數的隨機驗證碼。并生成新的字段,然后加入數據庫
ALTER TABLE emp ADD rand_data int COMMENT "隨機數";
update emp set rand_data = rpad(round(rand()*1000000 , 0), 6, '0');
三、日期函數
1.常見的日期函數
2.日期函數的基本使用
A. curdate:當前日期
select curdate(); -- 2025-03-29B. curtime:當前時間
select curtime(); -- 11:34:59C. now:當前日期和時間
select now(); -- 2025-03-29 11:35:16 D. YEAR , MONTH , DAY:當前年、月、日select YEAR(now()); -- 2025select MONTH(now()); -- 3select DAY(now()); -- 29E. date_add:增加指定的時間間隔
select date_add(now(), INTERVAL 70 YEAR ); -- 當前時間往后推70年 -- 2095-03-29 11:38:36F. datediff:獲取兩個日期相差的天數 -- 第一個時間減去第二個時間
select datediff('2021-10-01', '2021-12-01'); -- -61
3.日期函數的數據庫案例演示?
案例: 查詢所有員工的入職天數,并根據入職天數倒序排序。(演示的表與一.3的案例同樣)
思路: 入職天數,就是通過當前日期 - 入職日期,所以需要使用datediff函數來完成。
select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by entrydays desc;
四、流程函數?
流程函數也是很常用的一類函數,可以在SQL語句中實現條件篩選,從而提高語句的效率。
1.常見的流程函數
?2.流程函數的基本使用
A. if
-- IF(value, t, f) 如果 value 為 true,則返回 t,否則返回 f
select if(false, 'Ok', 'Error'); -- ErrorB. ifnull
-- IFNULL(value1, value2) 如果 value1 不為空,返回 value1,否則返回 value2
select ifnull('Ok','Default'); -- Ok
select ifnull('','Default'); -- 返回前面的空字符串
select ifnull(null,'Default'); -- DefaultC. case when then else end
-- CASE WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END 如果 val1 為 true,返回 res1,... 否則返回 default 默認值-- 需求: 查詢emp表的員工姓名和工作地址 (北京/上海 ----> 一線城市 , 其他 ----> 二線城市)selectname,( case workaddress when '北京' then '一線城市' when '上海' then '一線城市' else
'二線城市' end ) as '工作地址'from emp;-- 張無忌,一線城市
-- 韋一笑,一線城市
3.流程函數的數據庫案例演示
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);
?按分數段進行優秀和及格展示
selectid,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;