MySQL数据库中内置函数的使用全解析

 更新时间:2026年05月12日 09:05:52   作者:重生之小比特  
大家在写 SQL 时,经常会遇到处理日期,拼接字符串等场景,如果手写逻辑又麻烦又容易错,其实 MySQL 早就给我们准备好了内置函数,直接调用就能搞定大部分需求,下面小编就和大家系统讲解一下吧

大家在写 SQL 时,经常会遇到处理日期、拼接字符串、数字计算、空值判断等场景。如果手写逻辑又麻烦又容易错,其实 MySQL 早就给我们准备好了内置函数,直接调用就能搞定大部分需求。

今天这篇文章,我把 MySQL 最常用的日期、字符串、数学、其他常用函数一次性整理好,配案例 + 表格,新手也能直接上手用!

一、日期函数(最常用,必背)

日常开发中,记录时间、计算天数、加减时间全靠它。

函数作用
current_date()获取当前日期(年月日)
current_time()获取当前时间(时分秒)
current_timestamp()当前时间戳(年月日时分秒)
now()当前日期时间(和 timestamp 效果一致)
date(datetime)提取日期部分,去掉时间
date_add (date, interval 数值 单位)日期加时间
date_sub (date, interval 数值 单位)日期减时间
datediff(date1, date2)计算两个日期相差天数

常用单位

year、month、day、hour、minute、second

快速示例

-- 当前日期
SELECT current_date(); 

-- 当前时间
SELECT current_time(); 

-- 当前完整时间
SELECT now(); 

-- 日期加10天
SELECT date_add('2017-10-28', interval 10 day); 

-- 日期减2天
SELECT date_sub('2017-10-1', interval 2 day); 

-- 计算日期差
SELECT datediff('2017-10-10', '2016-09-01'); 

实战小案例

建表存生日

CREATE TABLE tmp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    birthday DATE
);
INSERT INTO tmp(birthday) VALUES(current_date());

留言表:只显示日期、查 2 分钟内发布的帖子

CREATE TABLE msg (
    id INT PRIMARY KEY AUTO_INCREMENT,
    content VARCHAR(30) NOT NULL,
    sendtime DATETIME
);
INSERT INTO msg(content,sendtime) VALUES('hello1', now());

-- 只显示日期,不显示时间
SELECT content, date(sendtime) FROM msg;

-- 查询2分钟内发布的帖子
SELECT * FROM msg WHERE date_add(sendtime, interval 2 minute) > now();

二、字符串函数(拼接、截取、替换)

处理文本、姓名、内容展示时高频使用。

函数作用
charset(str)返回字符串字符集
concat(s1,s2...)字符串拼接
instr(str,sub)子串第一次出现位置
ucase/upper转大写
lcase/lower转小写
left(str,len)从左边取 len 个字符
length(str)字符串字节长度
replace(str,old,new)字符串替换
substring(str,pos,len)截取字符串
trim/ltrim/rtrim去空格

快速示例

-- 拼接字符串
SELECT concat('张三', '的语文是', 90, '分');

-- 字符串长度(字节)
SELECT length('张三');

-- 替换字符
SELECT replace('Smith', 'S', '上海');

-- 截取第2个字符开始,取2个
SELECT substring('Smith', 2, 2);

-- 首字母小写
SELECT concat(lcase(substring(ename,1,1)), substring(ename,2)) FROM emp;

三、数学函数(计算、取整、随机数)

做统计、报表、数值处理必备。

函数作用
abs(x)绝对值
ceiling(x)向上取整
floor(x)向下取整
format(x,n)保留 n 位小数(四舍五入)
rand()0~1 随机小数
mod(x,y)取余 / 取模
conv(x,from,to)进制转换

快速示例

-- 绝对值
SELECT abs(-100.2); 

-- 向上取整
SELECT ceiling(23.04); 

-- 向下取整
SELECT floor(23.7); 

-- 保留2位小数
SELECT format(12.3456, 2); 

-- 随机数
SELECT rand(); 

四、其他高频函数(必须会)

这些函数在项目里几乎天天用。

函数作用
user()当前数据库用户
database()当前数据库名
md5(str)MD5 加密(32 位)
password()MySQL 用户加密
ifnull(val1,val2)val1 为 NULL 则返回 val2,否则返回 val1

快速示例

-- 当前用户
SELECT user(); 

-- 当前库
SELECT database(); 

-- MD5加密
SELECT md5('admin'); 

-- NULL处理
SELECT ifnull(null, '默认值'); 

五、实战 OJ 小练习

题目:查找字符串 '10,A,B' 中逗号 ',' 出现的次数。

思路:用原长度 - 去掉逗号后的长度 = 逗号个数。

SELECT 
    length('10,A,B') - length(replace('10,A,B', ',', '')) AS cnt;

六、总结(一张图记住)

  • 日期:now / date_add / date_sub / datediff
  • 字符串:concat / replace / substring / length
  • 数学:abs / ceiling / floor / format / rand
  • 通用:ifnull / md5 / user / database

把这些函数背熟,80% 的日常 SQL 都能轻松写出来,代码更简洁、效率更高!

到此这篇关于MySQL数据库中内置函数的使用全解析的文章就介绍到这了,更多相关MySQL内置函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql join连接查询的语法与示例

    Mysql join连接查询的语法与示例

    这篇文章主要给大家介绍了关于Mysql join连接查询的相关资料,文中介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 将图片储存在MySQL数据库中的几种方法

    将图片储存在MySQL数据库中的几种方法

    今天小编就为大家分享一篇关于将图片储存在MySQL数据库中的几种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 详解mysql索引总结----mysql索引类型以及创建

    详解mysql索引总结----mysql索引类型以及创建

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。这篇文章主要介绍了详解mysql索引总结----mysql索引类型以及创建,有兴趣的可以了解一下。
    2016-11-11
  • SQL数据分表Mybatis Plus动态表名优方案

    SQL数据分表Mybatis Plus动态表名优方案

    这篇文章主要介绍了SQL数据分表Mybatis Plus动态表名优方案,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • MySQL百万级数据,怎样做分页查询

    MySQL百万级数据,怎样做分页查询

    这篇文章主要介绍了MySQL百万级数据,怎样做分页查询?今天咱们就来聊聊这个话题,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • mysql 8.0.30 降级到 8.0.27的详细步骤

    mysql 8.0.30 降级到 8.0.27的详细步骤

    这篇文章主要介绍了mysql 8.0.30 降级到 8.0.27,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • MySQL 一次执行多条语句的实现及常见问题

    MySQL 一次执行多条语句的实现及常见问题

    通常情况MySQL出于安全考虑不允许一次执行多条语句(但也不报错,很让人郁闷)。
    2009-08-08
  • Mysql错误:Too many connections的解决方法

    Mysql错误:Too many connections的解决方法

    这篇文章主要给大家介绍了关于Mysql错误Too many connections的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • MySQL5.6解压版服务无法启动之系统错误1067问题

    MySQL5.6解压版服务无法启动之系统错误1067问题

    这篇文章主要介绍了MySQL5.6解压版服务无法启动—系统错误1067问题及解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • mysql如何获取时间整点

    mysql如何获取时间整点

    这篇文章主要介绍了mysql如何获取时间整点问题,具有很好的的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论