admin管理员组

文章数量:1794759

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个长度的字符串

接下来分别对这些函数进行演示

代码语言:javascript代码运行次数:0运行复制
-- concat(S1,S2...Sn)字符串拼接,将S1,S2...Sn拼接成一个字符串
select concat('hello','mysql');
-- LOWER(str) 将字符串str全部转换为小写
select lower('Hello');
-- UPPER(str) 将字符串str全部转换为大写
select upper('Hello');
-- LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符长度
select lpad('01',5,'-');
-- RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符长度
select rpad('01',5,'-');
-- TRIM(str) 去掉字符串头部和尾部的空格
select trim(  'hell o' );
-- SUBSTRING(str,start,len) 返回从字符串str从start起的len个长度的字符串
select substring('hello',3,2);

trim()只会去除开头和结尾的空格,字符串中间的空格并不会被去除

这些函数还可以和 update 操作搭配使用:

代码语言:javascript代码运行次数:0运行复制
update student
set sn = lpad(sn, 6, '0');

数值函数

函数

功能

CEIL(x)

向上取整

FLOOR(x)

向下取整

MOD(x,y)

返回x/y的模

RAND()

返回0~1的随机数

ROUND(x,y)

求参数x的四舍五入的值,保留y位小数

向上取整时,只要小数部分不是 0 ,就会向上取整

保留小数位数时,采用的是四舍五入的方法

代码语言:javascript代码运行次数:0运行复制
-- CEIL(x) 向上取整
select ceil(1.1);
-- floor(x) 向下取整
select floor(1.1);
-- MOD(x,y) 返回x/y的模
select mod(3, 5);
-- RAND() 返回0~1的随机数
select rand();
-- ROUND(x,y) 求参数x的四舍五入的值,保留y位小数
select round(2.345,2);

函数与函数之间可以进行嵌套,例如生成一个四位数的随机数就可以这样写

代码语言:javascript代码运行次数:0运行复制
-- 生成一个四位数随机数
select round(rand()*10000,0);

但此时还有一个小问题,如果说生成出来的0~1的数是 0.002这样的数,那么最终结果就不是4位数了,就需要在前面补上0,所以还需要调用lpad()函数

代码语言:javascript代码运行次数:0运行复制
select lpad(round(rand()*10000,0),4,'0');

日期函数

函数

功能

CURDATE()

返回当前日期

CURTIME()

返回当前时间

NOW()

返回当前日期和时间

YEAR(date)

获取指定date的年份

MONTH(date)

获取指定date的月份

DAY(date)

获取指定date的日期

DATE_ADD(date,INTERVAL expr type)

返回一个日期/时间值加上一个时间间隔expr后的时间值

DATEDIFF(date1,date 2)

返回起始时间date1和结束时间date2之间的天数

代码语言:javascript代码运行次数:0运行复制
-- 当前日期
select curdate();
-- 当前时间
select curtime();
-- 当前日期和时间
select now();
代码语言:javascript代码运行次数:0运行复制
-- 分别获取year,month,day
select year(now());
select month(now());
select day(now());

接下来看时间间隔相关的函数

代码语言:javascript代码运行次数:0运行复制
-- 添加时间间隔
select date_add(now(), interval 10 day);
-- 求出时间间隔
select datediff('2024-07-01', '2024-08-01');

上面的10 day也可以换成其他的时间单位,例如year,minute等

datediff() 函数只能计算相差的天数

流程函数

流程函数可以在SQL语句中实现条件筛选,从而提高语句的效率

函数

功能

IF(value,t,f)

如果value为true,就返回 t ,否则返回 f

IFNULL(value1,value2)

如果value1不为空,返回value1,否则返回value2

CASE WHEN[val 1] THEN[res1]...ELSE[default] END

如果val1为true,返回res1,否则返回default默认值

CASE[expr] WHEN[val 1] THEN[res1]...ELSE[default] END

如果expr的值等于val1,返回res1,否则返回default默认值

这里判断null是依然和之前一样,"" 这样一个空的字符串并不是null

代码语言:javascript代码运行次数:0运行复制
-- if和ifnull
select if(true, 'ok', 'no');
select ifnull('hello', 'ok');
代码语言:javascript代码运行次数:0运行复制
-- case when then end
select (case name when '许仙' then '民间传说人物' when '白素贞' then '民间传说人物' else '其他' end)
from student;

-- null的判断
SELECT (CASE WHEN mail IS NULL THEN '无邮箱' ELSE '有邮箱' END) AS mail_status
FROM student;

这个是加入了expr的值

代码语言:javascript代码运行次数:0运行复制
select (case '许仙' when '许仙' then '民间传说人物' else '不存在' end);

聚合函数

函数

说明

COUNT([DISTINCT] expr)

返回查询到的数据的数量

SUM([DISTINCT] expr)

返回查询到的数据的总和

AVG([DISTINCT] expr)

返回查询到的数据的平均值

MAX([DISTINCT] expr)

返回查询到的数据的最大值

MIN([DISTINCT] expr)

返回查询到的数据的最小值

本文标签: MySQL基础函数