数据库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个长度的字符串
  • 语法: SELECT 函数( 参数 );
-- concat :HelloMySQL
select concat('Hello' , 'MySQL');
-- lower :hello
select lower('HELLO');
-- upper :HELLO
select upper('hello');
-- lpad :---01
select lpad('01',5,'-');
-- rpad :01---
select rpad('01',5,'-');
-- trim :Hello MySQL
select trim(' Hello MySQL ');
-- substring :Hello
select substring('Hello MySQL',1,5);

二、数值函数

常见的数值函数如下:

函数功能
CEIL ( x )向上取整
FLOOR ( x )向下取整
MOD ( x , y )返回x/y的模
RAND ( )返回0~1内的随机数
ROUND ( x , y )求参数x的四舍五入的值,保留y位小数
-- ceil :2
select ceil(1.5);
select ceil(1.1);
-- floor :1
select ceil(1.1);
-- mod :3
select mod(3,4);
-- rand
select rand();
-- round :2.35
select round(2.345,2);

案列:

需求:通过数据库的函数,生成一个六位数的随机验证码。

-- 1.生成随机数变小数点前6位
select rand()*1000000;
-- 2.四舍五入
select round(rand()*1000000,0);
-- 0.051316 3.乘后补零
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() :2023-03-21
select curdate();
-- curtime() :19:13:22
select  curtime();
-- now() :2023-03-21 19:13:44
select now();
-- year() :2023
select year(now());
-- month() :3
select month(now());
-- day() :21
select day(now());
-- date_add() :2023-05-30 19:15:32
select date_add(now(),INTERVAL 70 DAY );
-- 2029-01-21 19:15:54
select date_add(now(),INTERVAL 70 MONTH );
-- dateiff() :70
select datediff('2023-05-30','2023-03-21');

案列:

需求:查询所有员工的入职天数,并根据入职天数倒序排序。

-- 1.查询所有员工信息
select * from employee;
-- 2. 入职天数
select name, datediff(curdate(),entrydate)from employee;
-- 3.起别名
select name, datediff(curdate(),entrydate) as 'worktime' from employee ;
-- 4.倒序排序
select name, datediff(curdate(),entrydate) as 'worktime' 
from employee order by worktime desc ;

四、流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。

函数功能
lF (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 :ok
select if(true,'ok','error');
-- ifnull :ok
select ifnull('ok','default');
-- default
select ifnull(null,'default');
-- 第一个值不为null,返回第一个值
-- 第一个值为null,返回第二个值

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

案列:

需求:统计班级各个学院的成绩,展示规则如下:

  • >= 85,展示优秀。
  • >= 60,展示及格。
  • 否则,展示不及格。
-- 1.查询全部信息
select id,name,math,english,chinese from score;
-- 2.判断
select
       id,
       name,
       (case when math >= 85 then '优秀' 
             when math >=60 then '及格' 
             else '不及格' end) as '数学',
       (case when english >= 85 then '优秀' 
             when math >=60 then '及格' 
             else '不及格' end) as '英语',
       (case when chinese >= 85 then '优秀' 
             when math >=60 then '及格' 
             else '不及格' end) as '语文'
from score;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hgngy.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值