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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 💡新手必收!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版本,其他数据库可能略有差异。

相关文章
|
1月前
|
SQL 关系型数据库 MySQL
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
用生活化比喻(如字典目录)详解索引原理:它通过B+树结构加速查询,避免全表扫描;涵盖创建、查看、删除索引方法,联合索引的最左前缀原则,以及读写平衡等实战要点——让查询从“等几秒”变“秒出”!
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
|
28天前
|
SQL 关系型数据库 MySQL
5款好用的免费MySQL客户端,新手必备!
告别枯燥命令行!数据库小学妹精选5款免费MySQL图形化工具:Workbench(官方全能)、phpMyAdmin(免安装Web版)、DBeaver(多库支持)、HeidiSQL(Windows轻量之选)、TablePlus(高颜值跨平台)。小白友好,语法高亮、自动补全、可视化结构一应俱全,助你高效学SQL!
|
5天前
|
网络架构 测试技术
KKCE:在线ping超简单,排查网络故障一步到位
在线Ping是网页版网络诊断工具,无需安装、不需命令行,输入网址或IP一键检测连通性、延迟与丢包。操作极简,手机电脑皆可用,小白也能3秒定位网络卡顿、掉线或不通问题。(239字)
141 5
|
29天前
|
SQL NoSQL BI
运营转DBA:我终于知道数据库不是Excel了
小耶分享数据库入门干货:零基础也能懂!对比Excel,解析数据库高效查数、并发处理、数据安全等核心优势;手把手教SELECT/WHERE/JOIN三招入门;避坑提醒——DELETE前先SELECT。转行不难,SQL即问数据的语言!
运营转DBA:我终于知道数据库不是Excel了
|
26天前
|
SQL 关系型数据库 MySQL
SQL优化十大技巧,查询速度提升10倍!
数据库小学妹带你轻松提速SQL!10个实战优化技巧:精简SELECT、善用LIMIT、巧用EXPLAIN、合理建索引、避开函数索引失效、JOIN优于子查询、IN替代OR、批量操作、EXISTS优化大子查询、定期OPTIMIZE。附避坑指南,新手也能秒上手!
|
25天前
|
存储 JSON 缓存
告别数据混乱!数据库设计三范式从入门到实践
数据库小学妹带你轻松入门三范式!用“建房打地基”比喻,讲清1NF(列不可分)、2NF(消除部分依赖)、3NF(消除传递依赖),直击数据冗余、更新异常等痛点。附实战拆表案例与反范式化提醒,助你设计出结构清晰、稳定高效的数据库!
|
25天前
|
SQL 运维 监控
范式设计避坑指南:别让“规范”变成“枷锁”
数据库小学妹带你避开范式设计5大隐形陷阱!从误判主键、隐藏传递依赖,到过度JOIN、盲目反范式、遗留系统改造难题,结合业务平衡与设计思维,教你理性取舍——三范式是起点,不是枷锁。实战避坑,丝滑落地!
|
1月前
|
SQL 数据库
多表关联查询入门:LEFT JOIN、INNER JOIN一文搞懂|转行学DB第6天
本文通俗易懂地讲解了数据库多表查询的三种JOIN操作:INNER JOIN(内连接)只返回两表匹配的数据,适用于查询交集数据;LEFT JOIN(左连接)保留左表所有记录并匹配右表数据,适用于查询主表完整信息;RIGHT JOIN(右连接)则保留右表所有记录。
|
1月前
|
SQL 关系型数据库 MySQL
主键、外键和约束:让数据库“有规矩”才能不出错!|转行学DB第5天
本文用通俗易懂的语言讲解了主键(数据的唯一标识)、外键(表间关联)以及唯一约束、非空约束等其他常见约束规则。通过具体SQL示例展示了各种约束的使用方法,并分享了新手容易踩的坑和实用建议。
|
28天前
|
存储 SQL 关系型数据库
触发器:数据库的"自动响应"机制
数据库触发器是“自动响应”机制:当INSERT/UPDATE/DELETE发生时,无需调用即执行预设逻辑。适用于审计日志、数据校验、自动填充、级联操作等场景。支持BEFORE(可修改数据)和AFTER(常用于记录)两种时机,但需警惕性能影响与调试难度。