wordpress 全景插件,桂林网站优化注意事项,微商分销商城模块源码,建设项目环保试生产网站专栏文章索引#xff1a;数据库 有问题可私聊#xff1a;QQ#xff1a;3375119339 目录
一、简介
二、字符串函数
三、数值函数
四、日期函数
五、流程函数 一、简介 函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着#xff0c;这一段程序或代码在 M… 专栏文章索引数据库 有问题可私聊QQ3375119339 目录
一、简介
二、字符串函数
三、数值函数
四、日期函数
五、流程函数 一、简介 函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着这一段程序或代码在 MySQL 中 已经给我们提供了我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。 那么函数到底在哪儿使用呢 我们先来看两个场景 在企业的OA或其他的人力系统中经常会提供的有这样一个功能每一个员工登录上来之后都能够看到当前员工入职的天数。 而在数据库中存储的都是入职日期如 2000-11-12那如果快速计算出天数呢 在做报表这类的业务需求中,我们要展示出学员的分数等级分布。而在数据库中存储的是学生的分数值如98/75如何快速判定分数的等级呢 其实上述的这一类的需求呢我们通过 MySQL 中的函数都可以很方便的实现 。 MySQL 中的函数主要分为以下四类 字符串函数、数值函数、日期函数、流程函数。 二、字符串函数 MySQL 中内置了很多字符串函数常用的几个如下 函数功能 concat(S1,S2,...Sn) 字符串拼接将 S1 S2 ... 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); lower : 全部转小写 select lower(Hello); upper : 全部转大写 select upper(Hello); lpad : 左填充 select lpad(01, 5, -); rpad : 右填充 select rpad(01, 5, -); trim : 去除空格 select trim( Hello MySQL ); substring : 截取子字符串 select substring(Hello MySQL,1,5); 案例 由于业务需求变更企业员工的工号统一为 5 位数目前不足 5 位数的全部在前面补 0 。比如 1 号员工的工号应该为00001 。 update emp set workno lpad(workno, 5, 0); 处理完毕后 , 具体的数据为 三、数值函数 常见的数值函数如下 函数功能ceil(x) 向上取整 floor(x) 向下取整 mod(x,y) 返回 x/y 的模 rand() 返回 0~1 内的随机数 round(x,y) 求参数 x 的四舍五入的值保留 y 位小数 栗子 ceil向上取整 select ceil(1.1); floor向下取整 select floor(1.9); mod取模 select mod(7,4); rand获取随机数 select rand(); round四舍五入 select round(2.344,2); 案例 通过数据库的函数生成一个六位数的随机验证码。 思路 获取随机数可以通过 rand() 函数但是获取出来的随机数是在 0-1 之间的所以可以在其基础上乘以1000000 然后舍弃小数部分如果长度不足 6 位补 0 select lpad(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当前日期 curtime当前时间 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 ); datediff获取两个日期相差的天数 select datediff(2021-10-01, 2021-12-01); 案例 查询所有员工的入职天数并根据入职天数倒序排序。 思路 入职天数就是通过当前日期 - 入职日期所以需要使用 datediff 函数来完成。 select name, datediff(curdate(), entrydate) as entrydays from emp order by
entrydays desc; 五、流程函数 流程函数也是很常用的一类函数可以在 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 默认值 栗子 if select if(false, Ok, Error); ifnull select ifnull(Ok,Default);
select ifnull(,Default);
select ifnull(null,Default); case when then else end 需求 : 查询 emp 表的员工姓名和工作地址 ( 北京 / 上海 ---- 一线城市 , 其他 ---- 二线城市 ) selectname,( 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); 具体的 SQL 语句如下 : 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; MySQL 的常见函数我们学习完了那接下来我们就来分析一下在前面讲到的两个函数的案例场景思考一下需要用到什么样的函数来实现? 数据库中存储的是入职日期如 2000-01-01如何快速计算出入职天数呢 -------- 答案: datediff 数据库中存储的是学生的分数值如98、75如何快速判定分数的等级呢 ---------- 答案: case ... when ...