一、什么是 MySQL 函数?

你可以把它理解成:**MySQL 提前帮你写好的 "小工具"**你直接调用,就能快速完成:

  • 字符串处理
  • 数字计算
  • 日期处理
  • 统计计算
  • 判空、转换...

不用自己写复杂逻辑,直接用函数 = 一行搞定

二、MySQL 函数分 5 大类(必背)

1. 字符串函数(处理文字)

sql

复制代码
UPPER('abc')        → 转大写 ABC
LOWER('ABC')        → 转小写 abc
LENGTH('你好')      → 长度(字节)
CONCAT('a','b')     → 拼接字符串 → ab
SUBSTR('abcde',1,3) → 截取前3个字符 → abc
TRIM('  abc  ')     → 去掉两边空格
IFNULL(name,'未知') → 如果name为null,显示"未知"

2. 数值函数(处理数字)

复制代码
CEIL(1.1)       → 向上取整 2
FLOOR(1.9)      → 向下取整 1
ROUND(1.234,2)  → 四舍五入保留2位 → 1.23
ABS(-10)        → 绝对值 → 10
MOD(10,3)       → 取余 → 1
RAND()          → 随机数 0~1

3. 日期函数(处理时间)

复制代码
NOW()               → 当前时间 2026-04-06 10:55:00
CURDATE()           → 当前日期 2026-04-06
YEAR(NOW())         → 取年份 → 2026
MONTH(NOW())        → 取月份 → 4
DAY(NOW())          → 取日期 → 6
DATE_FORMAT(日期,'%Y-%m-%d') → 格式化日期

4. 流程函数(判断逻辑)

① IF (条件,成立值,不成立值)

sql

复制代码
IF(age>18,'成年','未成年')

② CASE WHEN(多条件判断)

搜索式 CASE(CASE WHEN)
例子1:
复制代码
CASE
    WHEN age<18 THEN '少年'
    WHEN age<30 THEN '青年'
    ELSE '中年'
END
例子2:
复制代码
SELECT
    id,
    name,
    CASE 
        WHEN math >= 85 THEN '优秀'
        WHEN math >= 60 THEN '及格'
        ELSE '不及格' 
    END AS math_level,
    CASE 
        WHEN english >= 85 THEN '优秀'
        WHEN english >= 60 THEN '及格'
        ELSE '不及格' 
    END AS english_level,
    CASE 
        WHEN chinese >= 85 THEN '优秀'
        WHEN chinese >= 60 THEN '及格'
        ELSE '不及格' 
    END AS chinese_level
FROM score;
例子3:
复制代码
CASE
    WHEN workaddress = '北京' OR workaddress = '上海' THEN '一线城市'
    ELSE '二线城市'
END
语法规则
  • CASE 后面不能跟字段名
  • 后面的 WHEN 可以写任意条件表达式(>、<、>=、AND、OR 等)
  • 逻辑:从上到下判断条件,第一个满足的就返回对应结果
简单式 CASE
例子1:

例子2:
复制代码
CASE workaddress
    WHEN '北京' THEN '一线城市'
    WHEN '上海' THEN '一线城市'
    ELSE '二线城市'
END
语法规则
  • CASE 后面必须跟字段名workaddress
  • 后面的 WHEN 只能写固定值 / 常量(不能写表达式)
  • 逻辑:把字段值和WHEN的值做等值匹配,相等就返回对应结果
两种写法的适用场景(一眼分清)

表格

语法类型 写法 适用场景 例子
简单式 CASE CASE 字段 WHEN 常量 THEN ... 等值匹配(等于某个值) 按城市分类、按性别分类
搜索式 CASE CASE WHEN 表达式 THEN ... 范围 / 多条件判断(>、<、区间、组合条件) 按分数分等级、按年龄分阶段

③ IFNULL (值,替换值)

sql

复制代码
IFNULL(workaddress,'地址未知')
  • IF(value, t, f):如果 value 为真,返回 t,否则返回 f。

    • 例子SELECT name, IF(age > 30, '老将', '新人') FROM emp;
  • IFNULL(value1, value2) :如果第一个值是 NULL,就返回第二个值。

    • 实战 :你的 workaddress 有些是 NULL,我们可以把它显示为"待定":SELECT name, IFNULL(workaddress, '待定') FROM emp;

5. 聚合函数(分组统计)

复制代码
COUNT(*)    → 统计总条数
SUM(age)    → 求和
AVG(age)    → 平均值
MAX(age)    → 最大值
MIN(age)    → 最小值

6.总结

相关推荐
CodexDave4 小时前
MySQL事务隔离级别与MVCC机制解析
前端·数据库·mysql·nginx·性能优化·负载均衡
王琦03186 小时前
生产环境中使用通用二进制包安装
mysql
蓝田~9 小时前
MySQL慢查询怎么优化?B+Tree索引原理+MVCC读不阻塞写+EXPLAIN执行计划,从5秒到0.05秒
数据库·mysql
Herbert_hwt9 小时前
MySQL学习前言:关于MySQL的历史与当下学习的必要性
mysql
时间的拾荒人10 小时前
MySQL 视图详解
android·数据库·mysql
尽兴-11 小时前
企业数据库选型与演进:Oracle、达梦、MySQL 与分库分表实践
数据库·mysql·oracle·分库分表
IT瑞先生12 小时前
Docker快速部署Mysql的三种方法——实操篇
mysql·adb·docker
数据库小学妹13 小时前
MySQL在线DDL实战:ALGORITHM三种算法对比+gh-ost变更管理SOP
mysql·dba·数据库运维·在线ddl·mdl锁·sql变更管理
Ethan010714 小时前
隔离级别管读,乐观锁管写——RC/RR 与写冲突的本质
mysql
熊文豪15 小时前
【金仓数据库征文】不装中间件的 MySQL→金仓在线迁移,mysql_fdw 全流程,和一个差点漏掉的 emoji
数据库·mysql·中间件·电科金仓