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

相关推荐
七夜zippoe1 小时前
OpenClaw 记忆维护:自动整理与归档
大数据·网络·数据库·openclaw·记忆维护
今儿敲了吗1 小时前
数据库(六)——数据库控制功能
数据库
瀚高PG实验室1 小时前
postgresql因在从库备份时间长而失败
运维·数据库·postgresql·瀚高数据库
ooseabiscuit1 小时前
Laravel10.x重磅发布:新特性全解析
android·java·开发语言·mysql
phltxy1 小时前
Redis:从入门到精通的第一步
数据库·redis·缓存
User_芊芊君子1 小时前
数据库V9R4C19安全加固:最小权限部署与不可逆哈希存储实战
数据库·安全·哈希算法
兄弟加油,别颓废了。1 小时前
[特殊字符] SDN 可视化管理平台完整搭建教程(Vue + Flask + MySQL)
vue.js·mysql·flask
消失的旧时光-19434 小时前
SQL 第五篇:SQL 如何真正接入 Spring Boot 项目(企业 Mapper 分层实战)
数据库·spring boot·sql
dfdfadffa10 小时前
如何用模块化方案组织一个可扩展的前端组件库项目
jvm·数据库·python