暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

5分钟学会!MySQL常用函数速查表

数据库小学妹 2026-04-20
124

💡 收藏这篇就够了!最全的MySQL函数速查,新手必备!

大家好呀!我是数据库小学妹👋

写SQL的时候,是不是经常遇到这种情况:

  • 想把两个字段的内容拼在一起?→ 找函数
  • 想把字符串转成大写?→ 找函数
  • 想算两个日期的天数差?→ 找函数

每次都要去搜,太浪费时间了。今天我把自己整理的MySQL常用函数速查表分享出来,建议收藏!

一、字符串函数:处理文本数据

💡 常用字符串函数速查

函数 语法 说明 示例
CONCAT CONCAT(str1, str2, …) 连接字符串 CONCAT(‘Hello’, ’ ', ‘World’) → ‘Hello World’
CONCAT_WS CONCAT_WS(sep, str1, str2, …) 用分隔符连接 CONCAT_WS(’-’, ‘2024’, ‘01’, ‘15’) → ‘2024-01-15’
SUBSTRING SUBSTRING(str, pos, len) 截取子串 SUBSTRING(‘Hello World’, 1, 5) → ‘Hello’
LEFT LEFT(str, len) 左侧截取 LEFT(‘Hello World’, 5) → ‘Hello’
RIGHT RIGHT(str, len) 右侧截取 RIGHT(‘Hello World’, 5) → ‘World’
LENGTH LENGTH(str) 字符串长度 LENGTH(‘Hello’) → 5
TRIM TRIM(str) 去除空格 TRIM(’ Hello ') → ‘Hello’
LTRIM LTRIM(str) 去除左侧空格 LTRIM(’ Hello’) → ‘Hello’
RTRIM RTRIM(str) 去除右侧空格 RTRIM('Hello ') → ‘Hello’
UPPER UPPER(str) 转大写 UPPER(‘hello’) → ‘HELLO’
LOWER LOWER(str) 转小写 LOWER(‘HELLO’) → ‘hello’
REPLACE REPLACE(str, old, new) 替换字符串 REPLACE(‘Hello World’, ‘World’, ‘MySQL’) → ‘Hello MySQL’
INSTR INSTR(str, substr) 查找子串位置 INSTR(‘Hello World’, ‘World’) → 7
LOCATE LOCATE(substr, str) 查找子串位置 LOCATE(‘World’, ‘Hello World’) → 7
REVERSE REVERSE(str) 反转字符串 REVERSE(‘Hello’) → ‘olleH’

💡 字符串函数实战案例

-- 1. 拼接姓名和邮箱 SELECT CONCAT(first_name, ' ', last_name, ' <', email, '>') as full_info FROM users; -- 2. 提取邮箱域名 SELECT email, SUBSTRING(email, INSTR(email, '@') + 1) as domain FROM users; -- 3. 格式化电话号码 SELECT CONCAT_WS('-', LEFT(phone, 3), SUBSTRING(phone, 4, 4), RIGHT(phone, 4)) as formatted_phone FROM users; -- 4. 统计用户名长度 SELECT username, LENGTH(username) as username_length FROM users ORDER BY username_length DESC; -- 5. 替换敏感信息 SELECT CONCAT(LEFT(email, 3), '***', SUBSTRING(email, INSTR(email, '@'))) as masked_email FROM users;

二、数学函数

💡 常用数学函数速查

函数 语法 说明 示例
ABS ABS(x) 绝对值 ABS(-10) → 10
CEIL CEIL(x) 向上取整 CEIL(3.14) → 4
FLOOR FLOOR(x) 向下取整 FLOOR(3.14) → 3
ROUND ROUND(x, d) 四舍五入 ROUND(3.14159, 2) → 3.14
TRUNCATE TRUNCATE(x, d) 截断小数 TRUNCATE(3.14159, 2) → 3.14
RAND RAND() 随机数 RAND() → 0.123456
POW POW(x, y) 幂运算 POW(2, 3) → 8
SQRT SQRT(x) 平方根 SQRT(16) → 4
MOD MOD(x, y) 取模 MOD(10, 3) → 1
SIGN SIGN(x) 符号 SIGN(-5) → -1, SIGN(0) → 0, SIGN(5) → 1

💡 数学函数实战案例

-- 1. 计算订单折扣价 SELECT product_name, price, discount_rate, ROUND(price * (1 - discount_rate), 2) as discounted_price FROM products; -- 2. 统计订单金额分布 SELECT FLOOR(amount / 100) * 100 as amount_range, COUNT(*) as order_count FROM orders GROUP BY FLOOR(amount / 100) ORDER BY amount_range; -- 3. 随机抽取10个用户 SELECT * FROM users ORDER BY RAND() LIMIT 10; -- 4. 计算商品评分(四舍五入到1位小数) SELECT product_name, AVG(rating) as avg_rating, ROUND(AVG(rating), 1) as avg_rating_rounded FROM product_reviews GROUP BY product_id; -- 5. 判断订单金额奇偶 SELECT id, amount, CASE WHEN MOD(amount, 2) = 0 THEN '偶数' ELSE '奇数' END as parity FROM orders;

三、日期时间函数(写报表必备)

💡 常用日期函数速查

函数 语法 说明 示例
NOW NOW() 当前日期时间 NOW() → ‘2024-01-15 14:30:00’
CURDATE CURDATE() 当前日期 CURDATE() → ‘2024-01-15’
CURTIME CURTIME() 当前时间 CURTIME() → ‘14:30:00’
DATE DATE(expr) 提取日期部分 DATE(‘2024-01-15 14:30:00’) → ‘2024-01-15’
TIME TIME(expr) 提取时间部分 TIME(‘2024-01-15 14:30:00’) → ‘14:30:00’
YEAR YEAR(date) 提取年份 YEAR(‘2024-01-15’) → 2024
MONTH MONTH(date) 提取月份 MONTH(‘2024-01-15’) → 1
DAY DAY(date) 提取日期 DAY(‘2024-01-15’) → 15
HOUR HOUR(time) 提取小时 HOUR(‘14:30:00’) → 14
MINUTE MINUTE(time) 提取分钟 MINUTE(‘14:30:00’) → 30
SECOND SECOND(time) 提取秒 SECOND(‘14:30:00’) → 0
DATE_ADD DATE_ADD(date, INTERVAL expr unit) 日期加法 DATE_ADD(‘2024-01-15’, INTERVAL 7 DAY) → ‘2024-01-22’
DATE_SUB DATE_SUB(date, INTERVAL expr unit) 日期减法 DATE_SUB(‘2024-01-15’, INTERVAL 7 DAY) → ‘2024-01-08’
DATEDIFF DATEDIFF(date1, date2) 日期差(天) DATEDIFF(‘2024-01-15’, ‘2024-01-01’) → 14
TIMESTAMPDIFF TIMESTAMPDIFF(unit, datetime1, datetime2) 时间差 TIMESTAMPDIFF(HOUR, ‘2024-01-15 10:00:00’, ‘2024-01-15 14:00:00’) → 4
DATE_FORMAT DATE_FORMAT(date, format) 格式化日期 DATE_FORMAT(‘2024-01-15’, ‘%Y年%m月%d日’) → ‘2024年01月15日’

💡 日期函数实战案例

-- 1. 查询最近7天的订单 SELECT * FROM orders WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY); -- 2. 统计每月订单数 SELECT DATE_FORMAT(order_date, '%Y-%m') as month, COUNT(*) as order_count, SUM(amount) as total_amount FROM orders GROUP BY DATE_FORMAT(order_date, '%Y-%m') ORDER BY month DESC; -- 3. 计算用户注册天数 SELECT username, created_at, DATEDIFF(CURDATE(), created_at) as days_since_register FROM users; -- 4. 格式化生日 SELECT name, birthday, DATE_FORMAT(birthday, '%m月%d日') as birthday_formatted FROM users; -- 5. 查询本周订单 SELECT * FROM orders WHERE YEARWEEK(order_date, 1) = YEARWEEK(CURDATE(), 1);

四、聚合函数

💡 常用聚合函数速查

函数 语法 说明 示例
COUNT COUNT(expr) 计数 COUNT(*) → 总行数
SUM SUM(expr) 求和 SUM(amount) → 总金额
AVG AVG(expr) 平均值 AVG(score) → 平均分
MAX MAX(expr) 最大值 MAX(price) → 最高价格
MIN MIN(expr) 最小值 MIN(price) → 最低价格
GROUP_CONCAT GROUP_CONCAT(expr) 分组连接 GROUP_CONCAT(name) → ‘张三,李四,王五’

💡 聚合函数实战案例

-- 1. 统计每个用户的订单数和总金额 SELECT user_id, COUNT(*) as order_count, SUM(amount) as total_amount, AVG(amount) as avg_amount, MAX(amount) as max_amount, MIN(amount) as min_amount FROM orders GROUP BY user_id; -- 2. 统计每个类别的商品数量和平均价格 SELECT category_id, COUNT(*) as product_count, AVG(price) as avg_price, MAX(price) as max_price, MIN(price) as min_price FROM products GROUP BY category_id; -- 3. 拼接每个用户的订单ID SELECT user_id, GROUP_CONCAT(order_id ORDER BY order_date DESC SEPARATOR ', ') as order_ids FROM orders GROUP BY user_id; -- 4. 统计每个年龄段的用户数 SELECT FLOOR(age / 10) * 10 as age_group, COUNT(*) as user_count FROM users GROUP BY FLOOR(age / 10) ORDER BY age_group;

五、条件函数

💡 常用条件函数速查

函数 语法 说明 示例
IF IF(expr, true_val, false_val) 简单条件判断 IF(score >= 60, ‘及格’, ‘不及格’)
IFNULL IFNULL(expr1, expr2) 空值替换 IFNULL(phone, ‘未填写’)
NULLIF NULLIF(expr1, expr2) 相等返回NULL NULLIF(0, 0) → NULL
CASE CASE WHEN … THEN … ELSE … END 多条件判断 CASE WHEN score >= 90 THEN ‘优秀’ WHEN score >= 60 THEN ‘及格’ ELSE ‘不及格’ END
COALESCE COALESCE(expr1, expr2, …) 返回第一个非空值 COALESCE(phone1, phone2, ‘无’)

💡 条件函数实战案例

-- 1. 根据分数评级 SELECT student_name, score, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 80 THEN '良好' WHEN score >= 60 THEN '及格' ELSE '不及格' END as grade FROM scores; -- 2. 处理空值 SELECT username, IFNULL(email, '未填写') as email, IFNULL(phone, '未填写') as phone FROM users; -- 3. 计算订单状态 SELECT id, amount, status, IF(status = 'paid', '已支付', '未支付') as status_text FROM orders; -- 4. 优先使用第一个非空联系方式 SELECT username, COALESCE(phone1, phone2, phone3, '无联系方式') as contact_phone FROM users; -- 5. 计算折扣(满1000打9折) SELECT product_name, price, IF(price >= 1000, price * 0.9, price) as final_price FROM products;

六、类型转换函数

💡 常用类型转换函数速查

函数 语法 说明 示例
CAST CAST(expr AS type) 类型转换 CAST(‘123’ AS SIGNED) → 123
CONVERT CONVERT(expr, type) 类型转换 CONVERT(‘123’, SIGNED) → 123
DATE DATE(expr) 转日期 DATE(‘2024-01-15 14:30:00’) → ‘2024-01-15’
TIME TIME(expr) 转时间 TIME(‘2024-01-15 14:30:00’) → ‘14:30:00’

💡 类型转换实战案例

-- 1. 字符串转数字 SELECT product_name, price_str, CAST(price_str AS DECIMAL(10,2)) as price_num FROM products; -- 2. 数字转字符串 SELECT id, amount, CONCAT('¥', CAST(amount AS CHAR)) as amount_text FROM orders; -- 3. 日期字符串转日期类型 SELECT order_date_str, CAST(order_date_str AS DATE) as order_date FROM orders_temp; -- 4. 时间戳转日期时间 SELECT timestamp_col, FROM_UNIXTIME(timestamp_col) as datetime_col FROM logs; -- 5. 处理混合类型比较 SELECT * FROM products WHERE CAST(price AS DECIMAL(10,2)) > 1000;

七、新手避坑指南(⚠️常见错误)

错误 后果 正确做法
忘记NULL处理 结果为NULL 使用IFNULL或COALESCE
字符串比较不区分大小写 逻辑错误 使用BINARY关键字
日期格式错误 查询失败 使用DATE_FORMAT统一格式
浮点数精度问题 计算错误 使用DECIMAL类型
函数嵌套过深 难以维护 适当拆分逻辑

八、函数速查表完整版

image_1 2.png

九、学习心得

📝 核心总结(三句话):

1️⃣ 函数是SQL的灵魂:掌握常用函数,让查询更强大

2️⃣ 分类记忆更高效:按功能分类,快速查找

3️⃣ 实践出真知:多写多练,熟能生巧

👋 我是数据库小学妹一个用设计师思维学数据库的转行人。我们一起,把复杂的技术变得简单有趣!💕—

本文为个人学习整理,函数均基于MySQL​ 8.0版本,其他数据库可能略有差异。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论