前言

MySQL提供了数百个内置函数,涵盖数据处理、计算、转换、分析等各个方面。这些函数就像SQL的"瑞士军刀",让数据处理变得异常强大!

前面的文章中我们以及学习了其中的聚合函数,这篇文件再来讲解一些其它的常用内置函数

1. 日期函数

在这里插入图片描述

下面通过例子来讲解它们的使用

1.1 current_date():获取当前日期

要获取当前日期,就可以使用current_date()函数
怎么用呢?
select current_date();
在这里插入图片描述

1.2 current_time():获取当前时间

select current_time();

在这里插入图片描述

1.3 select current_timestamp():获取当前时间戳

select current_timestamp();

时间戳:从1970年1月1日00时00分00秒开始总秒数,表示为 yyyy-mm-dd HH:ii:ss 格式

在这里插入图片描述

1.4 now():获取当前日期+时间

select now();

在这里插入图片描述
我们看到他和select current_timestamp();的返回结果是一样的

1.5 date(datetime):返回datetime参数的日期部分

演示一下:

select date('2025-12-20 08:00:00');

在这里插入图片描述
那我们上面学的now()不是会返回当前时间嘛,所以也可以这样:

select date(now());

将now()的返回值作为date函数的参数
在这里插入图片描述

1.6 date_add()

在这里插入图片描述
举个栗子:

今天是2026-02-08,我想在这个日期的基础上+10天,看得到的新日期是多少
在这里插入图片描述
+40天
在这里插入图片描述
interval后面的单位可以是year,minute,second,day
我们来试试其它的
+三年
在这里插入图片描述
+300分钟
在这里插入图片描述
加300分钟后日期是不变的,而且我们看到后面显示的时间是05:00:00,5小时刚好300分钟,所以参数日期时间字符串中若不包含时间部分,MySQL会将其默认为’00:00:00’
当然指定日期的同时我们可以手动指定具体的时间。
比如:
在当前时间的基础上+10分钟
select date_add(now(),interval 10 minute);
在这里插入图片描述
+20秒
在这里插入图片描述
当然没用那么准确,因为当前时间是一直在变化的。

上面都是+,当然也可以-

1.7 date_sub()

在这里插入图片描述
比如:
在这里插入图片描述
用法和date_sub是一样的,就不过多介绍了。

1.8 datediff():计算两个日期之间相差时间

select datediff('2026-02-08','2025-12-21');

在这里插入图片描述

1.9 案例一

创建一张表,记录生日

 create table tmp(
    id int primary key auto_increment,
    birthday date not null
    );

在这里插入图片描述
然后我们来插入一些数据:

我们可以自己给一个日期,比如
在这里插入图片描述
当然也可以插入上面我们学的日期函数的返回值
比如:
插入当前日期current_date
在这里插入图片描述
时间戳也可以
在这里插入图片描述
当前时间current_time其实也可以
在这里插入图片描述
当然建议你如果插入日期最好就只用current_date

1.10 案例二(留言板)

创建一个留言表:

create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);

在这里插入图片描述
我们平时在一些社交媒体平台比如微博抖音等发表评论的时候,发出去的时候会自动带上发布的时间和IP。
那现在如果我们在留言表中插入评论时,想让他带上发布的时间,其实也很简单

插入的时候时间这一列我们直接插入now()就可以了
在这里插入图片描述
这样插入的时候就自动记录了发布评论的时间
在这里插入图片描述
如果只显示评论日期,不显示后面的具体时间
在这里插入图片描述
查询两分钟内发布的评论
即当前时间-评论发布的时间<2分钟
也即评论发布时间+2分钟>当前时间
那我们上面学到的函数就可以用到了
select * from msg where date_add(sendtime,interval 2 minute)>now();
在这里插入图片描述
现在查到是空,因为所有评论发布都已经超过两分钟了
现在我来新插入一条
在这里插入图片描述
然后就可以查到了

2. 字符串函数

在这里插入图片描述

2.1 charset():返回参数字符串采用的字符集

比如:

select charset('dshuidhs');
select charset('中国');

在这里插入图片描述
传其他非字符串类型的参数会被转换成字符串:

比如:
当 CHARSET() 函数收到数字时,MySQL 会先将其转换为二进制字符串在这里插入图片描述
binary 表示数据以原始二进制形式存储,没有字符编码

另外,如果表中某列的类型是字符串类型,也可以作为参数:

在这里插入图片描述
结果就会显示该列所有数据的字符集

那我们什么时候会使用这个东西呢?

比如我们在查看一个表的时候,发现某列的数据中,有些是正常显示的,但是有些出现了乱码。那一定是编码出现了问题,这时候就可以查看一下该列数据采用的编码。

2.2 concat():连接字符串

比如:

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

在这里插入图片描述
参数可以有多个:
在这里插入图片描述
在这里插入图片描述
传其他类型会被转换为字符串然后拼接:
在这里插入图片描述

案例:要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分“

回到我们之前文章中用到的这张表
在这里插入图片描述
现在要显示所有同学的成绩,格式为:XXX的语文是XXX分,数学XXX分,英语XXX分
那我们拼接一下就可以
select concat(name,'的语文成绩是',chinese,',数学成绩是',math,',英语成绩是',english) from exam_result;
在这里插入图片描述

2.3 instr(string,sub):返回字串在主串中出现的位置

返回sub在string中出现的位置(从1开始),没有找到则返回0

举例:

select instr('dsfdfhds123snj','123');
在这里插入图片描述
如果查找一个不存在的字串
在这里插入图片描述
则返回0

2.4 ucase():将参数字符串转换为大写

举例:

select ucase('dsakand888JSJSJSN');

在这里插入图片描述

2.5 lcase():将参数字符串转换为小写

举例:

select lcase('dsakand888JSJSJSN');

在这里插入图片描述

2.6 left(string,length):在string中从左边开始取length个字符

举例:

select left('dadas12312',5);

在这里插入图片描述

当然也有right,那就是从右边开始取length个字符
在这里插入图片描述

2.7 length(string):求字符串占用字节数

length函数返回字符串长度,以字节为单位
如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)

举例:

在这里插入图片描述
一个英文字符一个字节,故长度为7
在这里插入图片描述
一个中文字符占3个字节(部分生僻字可能占4个字节),故这里长度为6

求学生表中学生姓名列所有数据占用的字节数:

在这里插入图片描述
select length(name), name from student;
在这里插入图片描述

2.8 replace(str,search_str,replace _str):将字符串str中的search_str字串替换成replace_str

举例:
在这里插入图片描述

案例:将EMP表中所有名字中有S的替换成’上海’

在这里插入图片描述
现在要将名字这一列中的所有‘s’替换成‘上海’
select replace(ename,'S','上海'),ename from emp;
在这里插入图片描述
当然这并不会修改表中的内容

2.9 strcmp(str1,str2):字符串比较

MySQL中的strcmp(str1,str2)其实就类似我们之前C语言中学的strcmp函数:

比较它们对应位置的字符,一个一个的比较,如果相等就比较下一个,不相等的时候,看两个字符谁大谁小,返回对应的值。
在这里插入图片描述
但是MySQL中的strcmp默认不区分大小写
在这里插入图片描述
在这里插入图片描述

2.10 substring(str,position,length)

substring(str,position,length):

从str的position位置开始(第一个字符的位置是1),截取length个字符(不指明length则默认截取到结尾)
在这里插入图片描述

案例:截取EMP表中ename字段的第二个到第三个字符

即第2个和第3个两个字符
select substring(ename,2,2),ename from emp;
在这里插入图片描述

2.11 trim(),ltrim(),rtrim()

TRIM(), LTRIM(), RTRIM() 是 MySQL 中用于去除字符串首尾空白字符的三个重要函数,对于数据清洗、用户输入处理等场景非常有用。
在这里插入图片描述

举例:
在这里插入图片描述
中间的空格不做处理
在这里插入图片描述

2.12 综合案例:以首字母小写的方式显示所有员工的姓名

在这里插入图片描述
怎么做?

将名字的首字母变成小写,其余不动,那我们先想办法把首字母和剩余部分分开
在这里插入图片描述
然后我们就可以将第一个字符变成小写
在这里插入图片描述
然后再将这两部分拼接起来即可
select ename,concat(lcase(substring(ename,1,1)),substring(ename,2)) from emp;
在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐