在上一篇文章中,我们全面解析了MySQL的基本查询操作,内容较为充实。今天这一篇将聚焦于MySQL内置函数——梳理那些最常用的日期函数、字符串函数、数学函数以及辅助函数,通过实际案例帮助大家快速掌握它们的用法。下面直接进入主题。
一. MySQL日期函数详解

上表汇总了MySQL中常见的日期函数,根据函数描述能清楚了解各自功能。接下来通过具体示例演示这些日期函数的实际应用。
1.1 创建一张表记录生日


首先创建一张用于记录生日的表,插入数据时直接调用日期函数获取当前时间。上述示例使用了三个日期函数获取当前时间,由于 birthday 字段类型为 date,最终只保留了日期部分,时间部分自动截掉。从结果可以直观看到日期的标准格式,同理也可以获取具体时间。
1.2 创建一张留言表



在这个例子中,可以使用 now() 或 current_timestamp 来记录留言时的具体时间,两者都能获取当前时间戳。接下来可以进一步扩展操作:
1.2.1 显示所有留言信息,发布日期只显示日期,不显示时间
这里需要用到 date() 函数,将日期部分单独提取出来:

通过 date() 函数成功过滤掉时间部分,只保留日期。
1.2.2 查询在2分钟内发布的帖子
先理清逻辑:两分钟之内发布的数据需要满足 sendtime + 2分钟 > 当前时间 或者 当前时间 - 2分钟 < sendtime。下面进行实操:

先插入一条新数据,然后通过 where 条件筛选,条件中使用 date_add 或 date_sub 进行时间加减运算,时间单位设置为分钟(minute)。从查询结果看,只有刚插入的那条数据符合条件,验证了逻辑的正确性。
二. MySQL字符串函数实战

上述表格列出MySQL中常见的字符串函数,部分函数名称与C/C++中的函数相同,功能也类似。下面通过几个典型案例进行说明:
2.1 获取emp表的ename列的字符集

使用 charset() 函数可以查看指定字段的字符集,默认字符集为utf8,因此查询结果也显示为utf8。
2.2 显示exam_result表中的信息,格式为“xxx的语文是xx分,数学xx分,英语xx分”

这里利用 concat() 函数进行字符串拼接,将各科成绩按指定格式组合在一起。操作简单,不再赘述。
2.3 求学生表中学生姓名占用的字节数

使用 length() 函数计算每个姓名占用的字节数。如前所述,在utf8字符集下,一个汉字占用3个字节,因此三个字的姓名占用9个字节,两个字的姓名占用6个字节。若为字母或数字,则每个占用1个字节。
2.4 将EMP表中所有名字里的“S”替换成“上海”

使用 replace() 函数,第二个参数指定被替换的字符,第三个参数指定替换后的内容。从结果可以看出,每个姓名中的“S”都被成功替换为“上海”。

需要注意的是,此操作仅影响查询结果显示,并未实际修改表中数据,ename 字段的值保持不变。
2.5 截取EMP表中ename字段的第二个到第三个字符

这里使用 substring() 函数。为便于对比,同时打印完整的 ename 字段。截取结果正确无误。注意下标从1开始(而非0),因此第二个字符对应下标2。
2.6 以首字母小写的方式显示所有员工的姓名

此操作稍显复杂,不能直接使用 lcase() 仅改变首字母而保持其他字母不变。正确做法是将首字母与剩余部分拆分,单独处理首字母后,再用 concat() 函数拼接回去。
三. MySQL数学函数应用

大部分数学函数在C/C++中已有接触,这里重点讲解 ceiling() 和 floor() 两个函数——分别是向上取整和向下取整。
3.1 ceiling函数(向上取整)
向上取整表示取大于或等于当前值的最小整数。来看具体示例:

若数值为3.1或3.9,向上取整后结果为4;若为负数(如-3.1、-3.9),向上取整后则变为-3。无论正负,结果总是不小于原值。

上述查询结果完全印证了这一规律。
3.2 floor函数(向下取整)
向下取整与向上取整相反,取小于或等于当前值的最大整数:

3.1或3.9向下取整后为3;-3.1、-3.9向下取整后为-4。结果总是不大于原值。

同样通过示例验证,结果完全符合预期。
四. MySQL其他实用函数
最后再介绍几个常用辅助函数:

第一个是 user(),用于查询当前数据库用户。

第二个是 md5(),对字符串进行MD5摘要运算,生成一个32位长度的字符串。

第三个是 ifnull(),若第一个参数为 null,则返回第二个参数的值;否则返回第一个参数本身。
以上就是本文对MySQL常用内置函数——日期函数、字符串函数、数学函数及其他函数的全面解析与实战演示。
