为了 门户网站建设seo排名第一
前言:
在掌握了MySQL中表的增删查改核心操作后(详见《MySQL 第七讲---基础篇 表的增删查改》),我们已经能够完成数据的基本存取与管理。但要让数据真正"活"起来,充分发挥数据库的价值,就需要借助MySQL强大的内置函数体系。
本讲将带您打开数据处理的新维度——通过内置函数实现数据的深度加工与智能转换。无论是快速格式化日期、精准处理字符串,还是执行复杂数学运算、智能聚合分析,这些内置函数都将成为您提升SQL编写效率和数据处理能力的利器。通过系统学习,您将发现原本需要多步操作的复杂需求,现在仅需一个函数即可优雅实现,让数据查询更高效,业务逻辑更清晰,为后续的统计分析、报表生成等高级应用打下坚实基础。让我们共同开启这场提升SQL表达力的函数探索之旅!
其实下面的内容更多的是一种科普性质的介绍,不过也没办法这种函数的使用也只能是做出类似一种百科全书式的介绍,暂时没想到有什么好的写法,大家对于这种内容有什么看法都可以提出来,博主会第一时间回应的。
不说了,下面正片开始。
目录
前言:
注意:下面使用的函数与我们上一讲学习的聚合函数性质是相同的都可以在select的时候使用。
一、日期函数
1.1 current_date函数
1.2 current_time函数
1.3 current_timestamp函数
1.4 now函数
1.5 date函数
1.6 date_add函数
1.7 date_sub函数
1.8 datediff函数
1.9 综合案例
二、字符串函数
2.1 charset函数
2.2 concat函数
2.3 instr函数
2.4 ucase函数
2.5 lcase函数
2.6 left函数
2.7 length函数
2.8 replace函数
2.9 strcmp函数
2.10 substring函数
2.11 ltrim、rtrim和trim函数
2.12 综合案例
三、数学函数
3.1 abs函数
3.2 bin函数
3.3 hex函数
3.4 conv函数
3.5 ceiling函数
3.6 floor函数
3.7 format函数
3.8 rand函数
3.9 mod函数
四、其他函数
4.1 user函数
4.2 md5函数
4.3 database函数
4.4 password函数
4.5 ifnull函数
总结:
注意:下面使用的函数与我们上一讲学习的聚合函数性质是相同的都可以在select的时候使用。
一、日期函数
常用的日期函数如下:
1.1 current_date
函数
current_date函数用于获取当前的日期。如下:
1.2 current_time
函数
current_time函数用于获取当前的时间。如下
在这里我们补充一点,我们平时指的日期一般是类似yyyy-mm-dd的形式的
而时间一般就是每天的某时某分某秒。
1.3 current_timestamp函数
current_timestamp函数用于获取当前的时间戳,以日期时间格式进行显示。如下:
1.4 now
函数
now函数用于获取当前的日期时间。如下:
效果是和current_timestamp函数差不多的。
1.5 date
函数
date函数用于获取当前的日期时间,但是它的使用是带参数的,必须传入一个时间或者是时间戳,它相当于是把时间的日期提取出来了。如下:
无参就报错,必须传入一个时间。
1.6 date_add
函数
date_add函数用于在日期的基础上添加日期或时间,但是使用不是像我们想的那样,可以直接进行加法运算,输入的格式还是有要求的。
如下:
这样直接输入是会报错的,我们的第二个参数必须带上interval与相关的单位。
如果在date_add函数中添加的日期/时间为负值,则相当于在日期的基础上减去日期/时间。如下:
1.7 date_sub
函数
它的功能是与上面的date_add()十分相似的,这里就不再过多的介绍了。
date_sub函数用于在日期的基础上减去日期或时间。如下:
如果在date_sub函数中减去的日期/时间为负值,则相当于在日期的基础上添加日期/时间。如下:
1.8 datediff
函数
datediff函数用于获取两个日期的差,单位是天。如下:
1.9 综合案例
我们的想法是按照我们平时使用QQ那样,可以看到具体的信息发送时间,如下图。
那么在外面学习过日期函数后,外面就可以尝试实现一下了。
创建一个评论表,表中包含自增长主键id、昵称、评论内容和评论时间。如下:
我们模拟一下用户发送评论的过程,向表中插入一些数据,插入时直接通过now函数指明评论时间。
mysql> insert into commend_from values ('张三','我是一个不被世界理解的天才,时间会证明我的才华',now());
ERROR 1146 (42S02): Table 'test.commend_from' doesn't exist
mysql> insert into comment_from values ('张三','我是一个不被世界理解的天才,时间会证明我的才华',now());
Query OK, 1 row affected (0.01 sec)mysql> insert into comment_from values ('张三','hahaha',now());
Query OK, 1 row affected (0.00 sec)mysql> insert into comment_from values ('李四','我欣赏你,我们可以引为知己啊!''now());
Query OK, 1 row affected (0.00 sec)mysql> insert into comment_from values ('王五','你们两个还不吃.药',now();
Query OK, 1 row affected (0.00 sec)
这样我们的表中就有了一些数据。
我们在后端显示评论信息时,如果只想显示评论的日期而不显示评论的时间,可以在查询sendtime字段时,通过date函数截取sendtime的日期部分进行显示。如下:
我们在实际使用QQ等通信软件的时候,不是还可以进行两分钟内撤回吗?其实我们在数据库当中就可以查询两分钟内的信息,然后再判断这个信息是否可以撤回。
如果要查询2分钟之内发布的评论信息,实际上就是要筛选出评论时间加上2分钟后大于当前时间的评论,这时需要同时借助date_add和now函数。
现在是已经没有可以撤回的数据了。
二、字符串函数
在MySQL当中是提供了很多的关于字符串操作的函数的。
常用的字符串函数如下:
2.1 charset函数
现有如下员工表,要求获取员工表中ename列使用的字符集。(就是我们上一讲结尾处使用的员工表)如下:
在查询员工表中的信息时,使用charset函数获取ename列使用的字符集即可。如下:
2.2 concat函数
这是一个字符串拼接函数,它可以将不同部分的字符串拼在一起。
现有如下成绩表,要求以“XXX的语文是XX分,数学是XX分,英语是XX分”的格式显示成绩表中的信息。如下:
这时候可以使用concat函数按要求进行字符串连接即可。
2.3 instr函数
instr函数用于获取一个字符串在另一个字符串中首次出现的位置,如果没有出现则返回0。如下:
2.4 ucase函数
ucase函数用于获取转换成大写后的字符串。如下:
2.5 lcase函数
lcase函数用于获取转换成小写后的字符串。如下:
2.6 left函数
left函数用于从字符串的左边开始,向后截取指定个数的字符。如下:
2.7 length函数
就是像C语言的sizeof操作符那样。
说明一下: 对于多字节字符来说,不同编码中一个字符所占的字节个数是不同的,比如utf8中一个字符占用3个字节,而gbk中一个字符占用2个字节。
如果要考虑一个字符串所占的字节数,那就必须考虑字符集。
2.8 replace函数
replace函数用于将字符串中的指定子字符串替换成另一个字符串,例如将员工表中所有名字中的“S”替换成“上海”。如下:
2.9 strcmp函数
strcmp函数用于逐字符按照ASCII码比较两个字符串的大小,两个字符串大小相等返回0,前者大返回1,后者大返回-1。如下:
需要注意的是,strcmp函数在比较时是不区分大小写的。如下:
2.10 substring函数
substring函数用于从字符串的指定位置开始,向后截取指定个数的字符。如下:
使用substring函数时,如果没有指定要截取的字符个数,则默认从指定位置开始截取到最后。就是和C语言的库函数效果是一样的。
2.11 ltrim、rtrim和trim函数
trim函数用于去除字符串的前后空格。如下:
ltrim和rtrim函数分别用于去除字符串的前空格和后空格。如下:
2.12 综合案例
要求以首字母小写的方式显示员工表中所有员工的姓名,思路如下:
- 使用substring函数,截取员工姓名的第一个字符,然后使用lcase将其转换成小写。
- 使用substring函数,截取员工姓名的第二个字符及其后续字符。
- 使用concat函数,将第一次截取并转换成小写的首字母,和第二次截取的字符串进行连接。
- 最终concat函数连接后得到的字符串便是首字母小写的员工姓名。
如下:
注意:MySQL的字符串开头下标是1。
三、数学函数
常用的数学函数如下:
3.1 abs函数
abs函数用于获取一个数的绝对值。如下:
3.2 bin函数
bin函数用于将一个十进制数转换成二进制。如下:
3.3 hex函数
hex函数用于将一个十进制数转换成十六进制。如下:
3.4 conv函数
conv函数用于将一个数从一个进制转换成另一个进制。如下:
注意:这个函数转化的进程没有要求,可以转到任意的进制去。
3.5 ceiling函数
ceiling函数用于对一个数进行向上取整。功能很好理解,ceiling是天花板的意思。
如下:
需要注意的是,向上取整本质是向正无穷方向取整,因此负数向上取整后得到的是第一个大于等于该数的整数。如下:
3.6 floor函数
floor函数用于对一个数进行向下取整。floor的意思是地板。
如下:
需要注意的是,向下取整本质是向负无穷方向取整,因此负数向下取整后得到的是第一个小于等于该数的整数。如下:
3.7 format函数
format函数用于对数值进行格式化,以四舍五入的方式保留指定位数的小数。如下:
3.8 rand函数
rand函数用于生成0.0到1.0的随机浮点数。跟C语言的rand函数还是很想的。
如下:
如果想要生成0到100的随机数,可以用生成的随机浮点数乘以100,然后再以某种取整方式进行取整。如下:
3.9 mod函数
mod函数用于对数值进行求余运算。如下:
四、其他函数
这一部分的函数,就没有什么太大的规律了,但也是日常使用时候可能需要的。
4.1 user函数
user函数用于获取MySQL连接的当前用户名和主机名。如下:
4.2 md5函数
md5函数用于对一个字符串进行md5摘要,摘要后得到一个32位字符串,用在加密方面。如下:
拓展:
一般情况下公司内部数据库不会存储用户的明文密码,而会将用户密码形成摘要后存储对应的摘要,当用户登录账号时,将用户输入的的密码形成摘要后与数据库中存储的摘要做对比,如果对比成功则允许登录。
这么做的好处主要有两个,第一个好处就是公司内部数据库中存储的不是用户的明文信息,就算用户信息泄露了也不会产生太大影响,第二个好处就是形成的摘要是定长的,这样有利于数据库表结构的设计。
4.3 database函数
database函数用于显示当前正在使用的数据库。如下:
4.4 ifnull函数
ifnull函数接受两个参数,如果第一个参数不为null则返回第一个参数值,否则返回第二个参数值。如下:
总结:
至此,你已经掌握了 MySQL 中常用的字符串函数(如 SUBSTRING()
、REPLACE()
)、数值函数(如 ABS()
、CEIL()
)、日期函数(如 NOW()
、DATEDIFF()
)以及条件函数(如 CASE...WHEN
)的使用方法。这些内置函数如同 SQL 的"瑞士军刀",能显著提升数据处理效率,减少代码冗余。
下一讲《MySQL 第九讲---基础篇 复合查询 | 内外链接》 我们将进入更高级的查询领域:
-
如何用
UNION
合并多表查询结果? -
怎样通过
INNER JOIN
关联订单与用户表? -
为什么
LEFT JOIN
能保留主表所有记录? -
子查询如何嵌套实现多层过滤?
掌握复合查询和表连接技术,你将真正释放 SQL 的关联分析能力,轻松应对真实业务中的复杂数据关系。
我们下一讲见!