一、MySQL函数概述
MySQL函数是预先编写好的代码块,用于执行特定操作并返回结果。它们极大简化了数据操作流程,提升了查询效率。函数可分为内置函数和用户自定义函数两大类,本文将重点解析最实用的内置函数。
二、核心函数分类及示例
1. 字符串函数
-- CONCAT连接字符串
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
-- SUBSTRING字符串截取
SELECT SUBSTRING('MySQL Functions', 7, 8) AS result; -- 返回"Function"
-- LENGTH获取字符串长度
SELECT product_name, LENGTH(product_name) AS name_length FROM products;
2. 数值函数
-- ROUND四舍五入
SELECT ROUND(15.756, 1); -- 返回15.8
-- CEIL向上取整
SELECT CEIL(12.1); -- 返回13
-- RAND生成随机数
SELECT FLOOR(RAND() * 100) AS random_number; -- 返回0-99的随机整数
3. 日期时间函数
-- NOW获取当前日期时间
SELECT NOW() AS current_datetime;
-- DATE_FORMAT格式化日期
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日') AS formatted_date;
-- DATEDIFF计算日期差
SELECT DATEDIFF('2023-12-31', '2023-01-01') AS days_diff; -- 返回364
4. 流程控制函数
-- CASE条件判断
SELECT product_name, price,
CASE
WHEN price > 100 THEN '高价'
WHEN price > 50 THEN '中价'
ELSE '低价'
END AS price_level
FROM products;
-- IFNULL处理空值
SELECT product_name, IFNULL(stock_quantity, 0) AS stock FROM products;
三、实战综合示例
用户数据统计场景:提取用户姓氏,统计注册时长,标注活跃状态。
SELECT
user_id,
SUBSTRING_INDEX(full_name, ' ', 1) AS last_name,
DATEDIFF(NOW(), registration_date) AS registration_days,
CASE
WHEN last_login_date > DATE_SUB(NOW(), INTERVAL 30 DAY) THEN '活跃'
ELSE '非活跃'
END AS activity_status,
CONCAT('用户已注册', FLOOR(DATEDIFF(NOW(), registration_date) / 365), '年') AS registration_info
FROM users
WHERE IFNULL(credit_score, 0) > 60;
四、性能优化注意事项
避免在WHERE条件中使用函数:会导致索引失效
-- 不推荐(索引失效)
SELECT * FROM orders WHERE YEAR(order_date) = 2023;
-- 推荐(使用索引)
SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
- 减少函数嵌套层级:多层嵌套会增加计算开销
- 预先计算存储:对频繁使用的函数结果考虑冗余存储
五、总结
MySQL函数是提升开发效率的利器,但需要合理使用。掌握常用函数的使用场景和性能特性,能够写出更加高效、可维护的SQL语句。建议在实际使用中结合官方文档深入学习,并根据具体业务场景选择最合适的函数解决方案。
📚延伸学习:探索MySQL窗口函数、JSON函数等高级功能,进一步提升数据处理能力!
5万+

被折叠的 条评论
为什么被折叠?



