【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

快速示例

sql

复制代码
-- 当前日期
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'); 

实战小案例

  1. 建表存生日

sql

复制代码
CREATE TABLE tmp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    birthday DATE
);
INSERT INTO tmp(birthday) VALUES(current_date());
  1. 留言表:只显示日期、查 2 分钟内发布的帖子

sql

复制代码
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 去空格

快速示例

sql

复制代码
-- 拼接字符串
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) 进制转换

快速示例

sql

复制代码
-- 绝对值
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

快速示例

sql

复制代码
-- 当前用户
SELECT user(); 

-- 当前库
SELECT database(); 

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

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

五、实战 OJ 小练习

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

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

sql

复制代码
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 都能轻松写出来,代码更简洁、效率更高!

相关推荐
程序猿阿伟33 分钟前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
二等饼干~za89866843 分钟前
geo优化源码开发搭建技术分享
大数据·网络·数据库·人工智能·音视频
数据库小学妹1 小时前
HTAP混合负载架构:如何用一个数据库同时搞定交易和分析
数据库·经验分享·架构·dba
wuxinyan1231 小时前
工业级大模型学习之路029:解决双智能体调用数据库报错问题
数据库·人工智能·python·学习·智能体
Elastic 中国社区官方博客1 小时前
Elastic 线下 Meetup 将于 2026 年 7 月 26 号下午在深圳举行
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
YL200404261 小时前
【Redis实战篇】秒杀实现方案(以优惠券秒杀为例)
数据库·redis
DIY源码阁1 小时前
JavaSwing宿舍管理系统 - MySQL版
java·数据库·mysql·eclipse
cfm_29142 小时前
MySQL8.0 InnoDB Cluster
数据库·mysql
kTR2hD1qb2 小时前
Claude Code Skill的介绍与使用
java·前端·数据库·人工智能