MySQL 函数是提升查询效率和数据处理能力的关键工具。掌握常用函数,能让你少写很多冗余逻辑,直接在 SQL 层完成计算、格式化、条件判断等操作。
字符串处理函数:让文本更灵活
日常开发中,经常需要截取、拼接、替换或大小写转换字段内容。
CONCAT(str1, str2, ...):拼接多个字符串,如 SELECT CONCAT('Hello', ' ', 'World'); 返回 'Hello World' SUBSTRING(str, pos, len) 或 SUBSTR():从位置 pos 开始截取 len 个字符,位置从 1 开始;SUBSTRING('MySQL', 2, 3) 得到 'ySQ' UPPER(str) / LOWER(str):统一转大写或小写,适合忽略大小写的比对或标准化显示 TRIM([BOTH|LEADING|TRAILING] [char FROM] str):默认去掉首尾空格,也可指定字符,如 TRIM('x' FROM 'xxxHelloxxx') → 'Hello' REPLACE(str, from_str, to_str):全局替换,比如清理电话号中的横线:REPLACE(phone, '-', '')数值与日期函数:快速计算与时间处理
统计分析、报表生成离不开这些函数,尤其注意 MySQL 的日期函数返回的是日期类型,可直接参与比较。
ROUND(x, d):四舍五入到小数点后 d 位;ROUND(3.14159, 2) → 3.14 FLOOR(x) / CEILING(x):向下/向上取整,常用于分页或等级计算 NOW() / CURDATE() / CURTIME():分别返回当前日期时间、日期、时间,无需传参 DATE_ADD(date, INTERVAL expr unit):加减时间,如 DATE_ADD(NOW(), INTERVAL 7 DAY) 获取一周后的时间 DATEDIFF(end_date, start_date):返回两个日期相差的天数(只算日期部分),适合计算会员有效期、逾期天数等条件与聚合函数:一行代码实现逻辑分支
避免在应用层做大量 if-else 判断,SQL 层就能完成基础业务逻辑。
CASE WHEN ... THEN ... ELSE ... END:标准条件表达式,可用于 SELECT、WHERE、ORDER BY 中,例如按金额分级:CASE WHEN amount > 1000 THEN '高价值' ELSE '普通' END IF(condition, true_val, false_val):简化的二元判断,如 IF(score >= 60, '通过', '未通过') COALESCE(val1, val2, ...):返回第一个非 NULL 值,常用于兜底默认值,比如 COALESCE(phone, mobile, '暂无联系方式') COUNT(), SUM(), AVG(), MAX(), MIN():配合 GROUP BY 使用,是聚合查询的基础;注意 COUNT(*) 统计行数(含 NULL),COUNT(col) 只统计该列非 NULL 值实用技巧与注意事项
用得顺手的前提是避开常见坑。
函数作用于字段时,可能使索引失效——比如 WHERE UPPER(name) = 'JOHN' 无法走 name 字段的索引,建议存储时统一格式或用生成列+索引优化 日期函数尽量用 DATE_SUB(NOW(), INTERVAL 30 DAY) 而非字符串拼接,避免时区和格式错误 NULL 参与运算结果仍为 NULL,善用 IFNULL() 或 COALESCE() 防止意外中断 函数嵌套不宜过深,影响可读性;复杂逻辑建议拆到应用层或用视图封装