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

相关推荐
阮胜昌20 分钟前
MySQL 中的动态数据脱敏:无需更改应用程序即可保护敏感数据
android·mysql·adb
小白说大模型2 小时前
AI驱动的个性化学习路径:知识图谱与知识点关联的存储与推理
大数据·人工智能·学习·mysql·机器学习·prompt·知识图谱
这个DBA有点耶2 小时前
多模数据库深度解读:从“多库拼装”到“一库多能”的架构演进
数据库·mysql·dba
程序员夏洛3 小时前
MySQL 默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
艺术留白3 小时前
MokaTest使用篇-SQL接口
数据库·sql
卓怡学长3 小时前
w180springboot基于Java的悠扬乐器管理
java·spring boot·mysql·spring·maven·intellij-idea
( •̀∀•́ )9204 小时前
MySQL 自动备份与恢复方案
数据库·mysql·oracle
这个DBA有点耶4 小时前
大事务的“事前预防”:监控、拦截、Kill,四层防线一次讲透
数据库·mysql·代码规范
tachibana24 小时前
RAGAS 指标解读
数据库·人工智能·算法·机器学习·架构·大模型·llm
mlidongfeng5 小时前
[AI][昇腾950]TA 学习
数据库·学习