MySQL-函数

目录

定义

字符串函数

CONCAT

LOWER

UPPER

LPAD、RPAD

TRIM

SUBSTRING

数值函数

CEIL(X)

FLOOR(X)

MOD

RAND

ROUND

日期函数

CURDATE

CURTIME

NOW

YEAR(DATE)

MONTH(DATE)

DAY(DATE)

DATE_ADD

 DATEDIFF

流程函数

IF

IFNULL

CASE WHEN THEN ELSE

形式1:

形式2: 

总结


定义

是指一段可以直接使用或者被另一段程序使用的代码或程序。

例如:

公司的数据表中一般登记了员工的生日,但是更经常使用的应该是员工的年龄。

数据表中储存了学生的成绩,但是我希望能快速得到学生的成绩等级。

而想要快速实现这些目的,我们就需要一些内置函数来提高处理数据的效率。

字符串函数

  • CONCAT

select concat('hello','world');

命令的结构是将字符'hello'与字符'world'进行拼接,结果如下:

  • LOWER

select lower('Hello');

 命令的结果是将字符串全部变成小写:

 

  • UPPER

select upper('Hallo');

 命令的结果是将字符串全部变成大写:

注意:字符串要使用引号括起来!!!

  • LPAD、RPAD

select lpad('01',6,'-');

lpad函数中有三个参数,分别是字符,填充后长度,填充字符。

运行结果如下: 

使用符号 - 向左填充 字符串 01 ,使得最后的字符串总长度为6。 

 同理也有向右填充

select rpad('01',6,'-');

  • TRIM

select trim(' my  sql ');

该函数只有一个参数,但注意的是,TRIM函数只能将字符串首尾的字符删去,其中间的空格依然存在。 

  • SUBSTRING

select substring('Hello_World!',1,5);

SUBSTRING函数有三个参数,分别是字符串、索引位置、截取长度。

PS:该函数的索引位置是从1开始的 ,与分页查询有所区别

数值函数

  • CEIL(X)

select ceil(1.1);
select ceil(1.6);
select ceil(-1.1);

向上取整,运行结果分别为2、2、-1

  • FLOOR(X)

select floor(1.1);
select floor(1.6);
select floor(-1.1);

向下取整,运行结果分别为1、1、-2

  • MOD

select mod(5,4);
select mod(3,4);

取模,运行结果分别是1、3

  • RAND

select rand();

会随机生成一个在0到1之间的小数

  • ROUND

select round(1.33,2);
select round(1.335,2);

四舍五入,运行结果分别是1.33、1.34 

实例:

随机生成一个六位数的验证码

select round( rand()*1000000,0 );

函数时可以进行内套的,运行结果如下:

但是这段代码并没有完全六位数验证码的满足要求,因为有可能随机生成的数,第一位小数为零,那么这样产生的是一位五位数

所以需要进行填充操作

select lpad(round( rand()*1000000,0 ),6,0);

这样就能保证一定是六位数的验证码

日期函数

  • CURDATE

SELECT curdate();

会显示当前系统的年月日

  • CURTIME

select curtime();

显示当前系统的时间

  • NOW

会显示当前系统的日期+时间

  • YEAR(DATE)

select year(now());
  • MONTH(DATE)

select month(now());
  • DAY(DATE)

select day(now());
  • DATE_ADD

select date_add(now(),interval 10 day);
--从现在时间开始,经过10天后的时间

三个参数分别是,起始时间,interval(固定的),时间间隔时间单位

  •  DATEDIFF

select datediff('2023-6-7','2025-2-28');

计算两个时间的时间差,注意的是它的计算逻辑是:前者 - 后者

实例 

计算所有员工的入职天数,并且按照倒序排序:

select *from users;  --使用员工信息表
select name ,datediff( curdate(),entrydate ) as 'entrydays' from users order by entrydays desc;
--将用户的姓名按照入职天数倒序排序

流程函数

  • IF

select if(1+1=1,'ok','error');

IF函数中要传入三个参数,表达式、真值时输出、假值时输出

  • IFNULL

select ifnull('hello','default');
select ifnull('','default');
select ifnull(null,'default');

 IFNULL是用来判断字符串是否为空,若不为空输出,若为空则将默认值输出

要注意的是,' ' (引号中什么也没有)并不是空,依然会将这个“空”输出,所以以上的运行结果为hello、空白、default

  • CASE WHEN THEN ELSE

形式1:

select user_name,user_address,
       (case substring(user_address,1,2) when '北京' then '一线城市'
        when '上海' then '一线城市'
        else '二线城市' end) as '工作地址'
from users;

 取员工地址的前两位,如果是北京或上海,就将其工作地址输出为一线城市,否则输出为而二线地址

形式2: 

select case when user_address = '北京市' then '大佬' else '菜鸡' ;

总结

于是我们就可以回答,本文一开始提的两个问题:

  • 公司的数据表中一般登记了员工的生日,但是更经常使用的员工的入职天数:使用DATEDIFF
  • 数据表中储存了学生的成绩,但是我希望能快速得到学生的成绩等级:使用CADE WHEN THEN ELSE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值