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

相关推荐
IT199520 小时前
Fail2Ban 防护 MySQL 实战|登录失败 3 次,IP 封禁 24 小时
数据库·mysql
夕除20 小时前
redis--IO 多路复用(select + poll)
数据库·sql
paopaokaka_luck1 天前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
lzhdim1 天前
100条常用SQL语句
数据库·sql·mysql·mybatis
天河归来1 天前
从原始消息到业务数据:三层数据架构的设计与实践
数据库·数据仓库·架构
数据库小学妹1 天前
金融数据库成本怎么算?五笔钱加一张TCO表
数据库·金融行业·数据库选型·国产化替代·tco·金融数据库
KaiwuDB1 天前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
auspicious航1 天前
PostgreSQL的备份与恢复
数据库·postgresql
这个DBA有点耶1 天前
从 MySQL 到时序数据库:我帮朋友做迁移的完整记录
数据库·架构·dba
泡海椒1 天前
深度解析JQuick-SQL AST到逻辑计划转换机制|分布式SQL原理
数据库·分布式·sql