MySQL 常用内置函数全解:字符串、数值、日期、流程控制实战教程

前言

MySQL 内置函数是日常查询、数据清洗、业务计算的核心工具,能简化复杂 SQL 逻辑,避免大量后端代码处理数据。本文按课程目录分为五大模块:字符串函数、数值函数、日期函数、流程函数、函数整体小结,覆盖开发高频用法,附带可直接运行示例。

27. 基础 - 函数 - 字符串函数

字符串函数用于处理 char/varchar/text 文本字段,是模糊查询、数据脱敏、拼接展示最常用的函数。

1. 常用核心函数及示例

(1)CONCAT 字符串拼接

拼接多个字符串,字段为 null 时整体返回 null

复制代码

-- 拼接姓名与手机号 SELECT CONCAT(name, '-', phone) AS user_info FROM user; -- 带分隔符拼接(推荐,规避null问题) SELECT CONCAT_WS('-', name, age, phone) AS info FROM user;

(2)LENGTH / CHAR_LENGTH 获取长度
  • LENGTH:字节长度(中文 utf8 占 3 字节)

  • CHAR_LENGTH:字符个数(中文、英文都算 1 个字符)

复制代码

SELECT LENGTH('数据库'), CHAR_LENGTH('数据库'); -- 9 , 3

(3)UPPER / LOWER 大小写转换
复制代码

SELECT UPPER('mysql'), LOWER('MYSQL'); -- MYSQL , mysql

(4)SUBSTRING 截取字符串

语法:SUBSTRING(字符串, 起始下标, 截取长度),下标从 1 开始

复制代码

-- 截取手机号后4位 SELECT SUBSTRING(phone, 8, 4) FROM user;

(5)TRIM / LTRIM / RTRIM 去除空格
复制代码

SELECT TRIM(' test '); -- 去除首尾空格 SELECT LTRIM(' test'), RTRIM('test ');

(6)REPLACE 字符串替换(脱敏神器)
复制代码

-- 手机号中间4位脱敏 SELECT REPLACE(phone, SUBSTRING(phone,4,4), '****') FROM user;

(7)LPAD / RPAD 填充补位
复制代码

-- 不足6位左侧补0,常用于编号格式化 SELECT LPAD('123', 6, '0'); -- 000123

28. 基础 - 函数 - 数值函数

专门处理数字字段(int、decimal、float),用于金额计算、分页取整、随机数生成。

核心函数示例

  1. ROUND 四舍五入
复制代码

SELECT ROUND(123.456, 2); -- 保留2位小数 123.46

  1. CEIL / FLOOR 向上 / 向下取整
复制代码

SELECT CEIL(10.1), FLOOR(10.9); -- 11 , 10

  1. MOD 取模(取余数)
复制代码

SELECT MOD(10,3); -- 1

  1. ABS 取绝对值
复制代码

SELECT ABS(-99); -- 99

  1. RAND () 生成 0~1 随机浮点数
复制代码

-- 生成1-100随机整数 SELECT FLOOR(RAND() * 100) + 1;

  1. TRUNCATE 直接截断小数(不四舍五入)
复制代码

SELECT TRUNCATE(123.999, 1); -- 123.9

29. 基础 - 函数 - 日期函数

处理 date/datetime/timestamp 时间字段,统计日活、月度报表、过期判断必备。

高频日期函数

1. 获取当前时间
复制代码

SELECT NOW(); -- 年月日时分秒 2026-07-13 15:20:00 SELECT CURDATE(); -- 仅日期 2026-07-13 SELECT CURTIME(); -- 仅时间 15:20:00

2. 提取时间部分 YEAR/MONTH/DAY/HOUR
复制代码

SELECT YEAR(create_time), MONTH(create_time), DAY(create_time) FROM order;

3. DATE_ADD / DATE_SUB 日期加减
复制代码

-- 当前日期加7天 SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY); -- 当前时间减1个月 SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);

4. DATEDIFF 计算日期间隔天数
复制代码

-- 计算订单距今多少天 SELECT DATEDIFF(CURDATE(), create_time) FROM order;

5. DATE_FORMAT 格式化日期(展示专用)
复制代码

-- 格式化为 2026-07-13 15:20 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');

6. TIMESTAMPDIFF 精准间隔(年 / 月 / 时 / 分)
复制代码

-- 计算用户注册至今几个月 SELECT TIMESTAMPDIFF(MONTH, register_time, NOW()) FROM user;

30. 基础 - 函数 - 流程函数

实现 SQL 内的条件判断,替代后端 if-else,常用于状态翻译、分等级统计,类似编程语言三元运算符、if 判断。

1. IF 函数(二选一判断)

语法:IF(条件, 成立值, 不成立值)

复制代码

-- 判断订单是否已支付 SELECT order_id, IF(pay_time IS NULL, '未支付', '已支付') AS pay_status FROM order;

2. IFNULL 空值兜底

字段为 NULL 时返回默认值,避免计算报错

复制代码

-- 无积分默认0 SELECT IFNULL(score, 0) FROM user;

3. CASE WHEN 多分支复杂判断(最常用)

适合多状态、分区间分级场景

复制代码

-- 根据消费金额划分用户等级 SELECT user_id, consume, CASE WHEN consume >= 10000 THEN 'VIP至尊' WHEN consume >= 1000 THEN 'VIP高级' ELSE '普通用户' END AS user_level FROM user;

4. NULLIF 相等返回 null

复制代码

SELECT NULLIF(name, ''); -- name为空字符串则返回null

31. 基础 - 函数 - 小结

一、四大类函数适用场景总结

  1. 字符串函数:文本拼接、截取、脱敏、格式化、模糊处理;操作用户名、手机号、地址等文本字段。

  2. 数值函数:金额小数处理、取整、随机数、数学运算;订单金额、商品价格、积分计算。

  3. 日期函数:时间筛选、报表统计、过期判断、时间格式化;日 / 周 / 月数据统计、活动有效期判断。

  4. 流程函数:SQL 内部条件逻辑、状态翻译、空值兼容;简化查询结果,减少后端代码判断。

二、开发最佳实践

  1. 禁止在索引列外层包裹函数 WHERE YEAR(create_time) = 2026 会失效索引,改用区间 create_time >= '2026-01-01'

  2. 优先在 SQL 处理简单逻辑 状态翻译、简单字符串脱敏用内置函数完成,减少 Java/Python 循环遍历数据。

  3. 空值统一用 IFNULL 兜底 数值计算时字段为 NULL 会导致结果为 NULL,提前设置默认 0 / 空字符串。

  4. 日期统一存储 datetime 避免用字符串存时间,无法使用日期函数、无法走时间索引。

  5. 脱敏逻辑写在查询层 手机号、身份证脱敏使用 REPLACE+SUBSTRING,无需修改原始数据库数据。

三、高频踩坑点

  1. 字符串截取 SUBSTRING 下标从 1 开始,不是 0,和编程语言习惯不同;

  2. LENGTH 统计中文字节,统计文字数量用 CHAR_LENGTH;

  3. RAND () 在一条 SQL 每行都会生成不同随机数,适合随机分页;

  4. CASE WHEN 执行顺序从上到下,匹配第一个条件后停止;

  5. CONCAT 任意参数为 NULL 整体返回 NULL,多字段拼接推荐 CONCAT_WS。

结尾

MySQL 内置函数是数据库开发的基本功,合理使用可以大幅简化业务代码、提升查询效率。四类函数覆盖 90% 日常业务场景,建议收藏本文,写报表、数据清洗、接口查询时直接复制示例 SQL 使用。后续会分享函数结合分组统计、索引优化的实战案例。


Markdown 文档完整文本(可直接复制保存为 .md 文件)

复制代码

# MySQL 常用内置函数全解:字符串、数值、日期、流程控制实战教程 ## 前言 MySQL 内置函数是日常查询、数据清洗、业务计算的核心工具,能简化复杂 SQL 逻辑,避免大量后端代码处理数据。本文按课程目录分为五大模块:字符串函数、数值函数、日期函数、流程函数、函数整体小结,覆盖开发高频用法,附带可直接运行示例。 ## 27. 基础-函数-字符串函数 字符串函数用于处理 `char/varchar/text` 文本字段,是模糊查询、数据脱敏、拼接展示最常用的函数。 ### 1. 常用核心函数及示例 #### (1)CONCAT 字符串拼接 拼接多个字符串,字段为 null 时整体返回 null ```sql -- 拼接姓名与手机号 SELECT CONCAT(name, '-', phone) AS user_info FROM user; -- 带分隔符拼接(推荐,规避null问题) SELECT CONCAT_WS('-', name, age, phone) AS info FROM user;

(2)LENGTH / CHAR_LENGTH 获取长度
  • LENGTH:字节长度(中文 utf8 占 3 字节)

  • CHAR_LENGTH:字符个数(中文、英文都算 1 个字符)

复制代码

SELECT LENGTH('数据库'), CHAR_LENGTH('数据库'); -- 9 , 3

(3)UPPER / LOWER 大小写转换
复制代码

SELECT UPPER('mysql'), LOWER('MYSQL'); -- MYSQL , mysql

(4)SUBSTRING 截取字符串

语法:SUBSTRING(字符串, 起始下标, 截取长度),下标从 1 开始

复制代码

-- 截取手机号后4位 SELECT SUBSTRING(phone, 8, 4) FROM user;

(5)TRIM / LTRIM / RTRIM 去除空格
复制代码

SELECT TRIM(' test '); -- 去除首尾空格 SELECT LTRIM(' test'), RTRIM('test ');

(6)REPLACE 字符串替换(脱敏神器)
复制代码

-- 手机号中间4位脱敏 SELECT REPLACE(phone, SUBSTRING(phone,4,4), '****') FROM user;

(7)LPAD / RPAD 填充补位
复制代码

-- 不足6位左侧补0,常用于编号格式化 SELECT LPAD('123', 6, '0'); -- 000123

28. 基础 - 函数 - 数值函数

专门处理数字字段(int、decimal、float),用于金额计算、分页取整、随机数生成。

核心函数示例

  1. ROUND 四舍五入
复制代码

SELECT ROUND(123.456, 2); -- 保留2位小数 123.46

  1. CEIL / FLOOR 向上 / 向下取整
复制代码

SELECT CEIL(10.1), FLOOR(10.9); -- 11 , 10

  1. MOD 取模(取余数)
复制代码

SELECT MOD(10,3); -- 1

  1. ABS 取绝对值
复制代码

SELECT ABS(-99); -- 99

  1. RAND () 生成 0~1 随机浮点数
复制代码

-- 生成1-100随机整数 SELECT FLOOR(RAND() * 100) + 1;

  1. TRUNCATE 直接截断小数(不四舍五入)
复制代码

SELECT TRUNCATE(123.999, 1); -- 123.9

29. 基础 - 函数 - 日期函数

处理 date/datetime/timestamp 时间字段,统计日活、月度报表、过期判断必备。

高频日期函数

1. 获取当前时间
复制代码

SELECT NOW(); -- 年月日时分秒 2026-07-13 15:20:00 SELECT CURDATE(); -- 仅日期 2026-07-13 SELECT CURTIME(); -- 仅时间 15:20:00

2. 提取时间部分 YEAR/MONTH/DAY/HOUR
复制代码

SELECT YEAR(create_time), MONTH(create_time), DAY(create_time) FROM order;

3. DATE_ADD / DATE_SUB 日期加减
复制代码

-- 当前日期加7天 SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY); -- 当前时间减1个月 SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);

4. DATEDIFF 计算日期间隔天数
复制代码

-- 计算订单距今多少天 SELECT DATEDIFF(CURDATE(), create_time) FROM order;

5. DATE_FORMAT 格式化日期(展示专用)
复制代码

-- 格式化为 2026-07-13 15:20 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');

6. TIMESTAMPDIFF 精准间隔(年 / 月 / 时 / 分)
复制代码

-- 计算用户注册至今几个月 SELECT TIMESTAMPDIFF(MONTH, register_time, NOW()) FROM user;

30. 基础 - 函数 - 流程函数

实现 SQL 内的条件判断,替代后端 if-else,常用于状态翻译、分等级统计,类似编程语言三元运算符、if 判断。

1. IF 函数(二选一判断)

语法:IF(条件, 成立值, 不成立值)

复制代码

-- 判断订单是否已支付 SELECT order_id, IF(pay_time IS NULL, '未支付', '已支付') AS pay_status FROM order;

2. IFNULL 空值兜底

字段为 NULL 时返回默认值,避免计算报错

复制代码

-- 无积分默认0 SELECT IFNULL(score, 0) FROM user;

3. CASE WHEN 多分支复杂判断(最常用)

适合多状态、分区间分级场景

复制代码

-- 根据消费金额划分用户等级 SELECT user_id, consume, CASE WHEN consume >= 10000 THEN 'VIP至尊' WHEN consume >= 1000 THEN 'VIP高级' ELSE '普通用户' END AS user_level FROM user;

4. NULLIF 相等返回 null

复制代码

SELECT NULLIF(name, ''); -- name为空字符串则返回null

31. 基础 - 函数 - 小结

一、四大类函数适用场景总结

  1. 字符串函数:文本拼接、截取、脱敏、格式化、模糊处理;操作用户名、手机号、地址等文本字段。

  2. 数值函数:金额小数处理、取整、随机数、数学运算;订单金额、商品价格、积分计算。

  3. 日期函数:时间筛选、报表统计、过期判断、时间格式化;日 / 周 / 月数据统计、活动有效期判断。

  4. 流程函数:SQL 内部条件逻辑、状态翻译、空值兼容;简化查询结果,减少后端代码判断。

二、开发最佳实践

  1. 禁止在索引列外层包裹函数 WHERE YEAR(create_time) = 2026 会失效索引,改用区间 create_time >= '2026-01-01'

  2. 优先在 SQL 处理简单逻辑 状态翻译、简单字符串脱敏使用内置函数完成,减少 Java/Python 循环遍历数据。

  3. 空值统一用 IFNULL 兜底 数值计算时字段为 NULL 会导致结果为 NULL,提前设置默认 0 / 空字符串。

  4. 日期统一存储 datetime 避免用字符串存时间,无法使用日期函数、无法走时间索引。

  5. 脱敏逻辑写在查询层 手机号、身份证脱敏使用 REPLACE+SUBSTRING,无需修改原始数据库数据。

三、高频踩坑点

  1. 字符串截取 SUBSTRING 下标从 1 开始,不是 0,和编程语言习惯不同;

  2. LENGTH 统计中文字节,统计文字数量用 CHAR_LENGTH;

  3. RAND () 在一条 SQL 每行都会生成不同随机数,适合随机分页;

  4. CASE WHEN 执行顺序从上到下,匹配第一个条件后停止;

  5. CONCAT 任意参数为 NULL 整体返回 NULL,多字段拼接推荐 CONCAT_WS。

结尾

MySQL 内置函数是数据库开发的基本功,合理使用可以大幅简化业务代码、提升查询效率。四类函数覆盖 90% 日常业务场景,建议收藏本文,写报表、数据清洗、接口查询时直接复制示例 SQL 使用。后续会分享函数结合分组统计、索引优化的实战案例。

复制代码
相关推荐
程序猿秃头之路1 小时前
DDD 系列:实体和值对象详解
数据库·oracle·ddd·领域驱动设计
Database_Cool_2 小时前
阿里云 RDS MySQL vs 腾讯云 CDB 国内云关系型数据库深度对比
数据库·mysql·阿里云
xiaohaiAIgeo2 小时前
【2026年】基于三维建模的实验室智慧管理平台:暖通能源照明的数字孪生方案
大数据·数据库·人工智能·科普知识
深盾科技_Virbox3 小时前
软件授权工具静默安装实践
java·运维·数据库·安全·软件需求
延凡科技3 小时前
延凡科技综合监控预警处置平台—— 一体化视频AI安防闭环系统设计与功能实现[特殊字符]️
数据库·人工智能·科技·安全·能源
老马聊技术3 小时前
Rocky Linux 9.0 安装 MySQL8.x详细教程
linux·数据库
醇氧3 小时前
主流 Agent 开发框架全解析(2026 最新)
大数据·数据库·人工智能·开源
吴声子夜歌4 小时前
Redis 6.x——整合SpringBoot
数据库·spring boot·redis
ATA88884 小时前
AI辅助生成SQL实战从连接配置到执行计划优化的完整技术流程
数据库·人工智能·智能问数