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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
PolarClaw,2核4GB
简介: 💡新手必收!MySQL最全函数速查表:涵盖字符串、数学、日期、聚合、条件、类型转换6大类,附实战示例与避坑指南,助你写SQL快人一步!

💡 收藏这篇就够了!最全的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版本,其他数据库可能略有差异。

相关文章
|
18天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
34830 46
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
12天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
11605 36
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
7天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
2427 24
|
29天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
45740 157
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
5天前
|
人工智能 弹性计算 安全
Hermes Agent是什么?怎么部署?超详细实操教程
Hermes Agent 是 Nous Research 于2026年2月开源的自进化AI智能体,支持跨会话持久记忆、自动提炼可复用技能、多平台接入与200+模型切换,真正实现“越用越懂你”。MIT协议,部署灵活,隐私可控。
1656 3
|
12天前
|
机器学习/深度学习 存储 人工智能
还在手写Skill?hermes-agent 让 Agent 自己进化能力
Hermes-agent 是 GitHub 23k+ Star 的开源项目,突破传统 Agent 依赖人工编写Aegnt Skill 的瓶颈,首创“自我进化”机制:通过失败→反思→自动生成技能→持续优化的闭环,让 Agent 在实践中自主构建、更新技能库,持续自我改进。
1803 6