在学习 MySQL 函数查询基础 时,理解常用函数及其在实际查询中的应用方式至关重要。本篇围绕字符串函数、数值函数、日期与时间函数、以及条件与聚合函数四大类,辅以若干查询实战示例,帮助你在 SELECT、WHERE、GROUP BY、ORDER BY 等语句中高效利用函数实现复杂业务逻辑。
2. 常用函数分类与作用
2.1 字符串函数
字符串函数用于处理文本数据,常见如 CONCAT、SUBSTR、LENGTH、TRIM、REPLACE 等。通过组合这些函数,可以实现拼接、裁剪、清理空格和大小写转换等常见任务。理解函数的输入与返回值类型,有助于避免字符编码或长度截断带来的错误。
例如,使用 CONCAT 拼接姓名字段以形成全名,是一个基础且常用的场景。下面的示例演示了如何把姓和名用空格拼接成一个完整的 fullname 字段:将文本拼接的结果作为新的列输出。
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM users
WHERE id = 123;还可以通过 SUBSTR/LEFT/RIGHT 等函数截取文本、通过 LENGTH/CHAR_LENGTH 计算长度、以及通过 TRIM 去除两端空格,以实现文本清洗和格式化输出。截取、长度与裁剪在数据清洗阶段非常实用。
SELECT SUBSTR(email, 1, 5) AS prefix
FROM users;定位文本中的位置也是常见需求之一,LOCATE 与 INSTR 可以在字符串中查找子串的位置。结合 LIKE 可以实现灵活的文本筛选。
SELECT LOCATE('@', email) AS at_pos
FROM users
WHERE email LIKE '%@%';2.2 数值函数
数值函数用于数字计算和处理,常用有 ROUND、TRUNCATE、CEILING、FLOOR、ABS、POWER、SQRT、RAND 等。通过这些函数,可以实现圆整、取整、幂运算、绝对值及随机数生成等操作。
对金额或评分等字段进行小数位处理是日常需求之一,使用 ROUND 可以实现指定小数位的四舍五入:
SELECT ROUND(price, 2) AS price_rounded
FROM products;需要进行幂运算或平方等运算时,POWER 和 SQRT 提供直接的数学能力:
SELECT POWER(rating, 2) AS rating_sq
FROM reviews;产生一个介于 0 和 1 之间的随机数时,可以使用 RAND,常用于打乱数据、A/B 测试等场景:
SELECT RAND() AS rnd_value;2.3 日期与时间函数
日期与时间函数帮助你处理时间戳、日期边界、时间段计算等。核心函数包括 NOW、CURDATE、CURTIME、DATE_ADD、DATE_SUB、DATEDIFF、TIMESTAMPDIFF 等。正确使用日期函数可以实现时间维度的聚合、筛选与格式化输出。
获取当前时间与日期是最基本的需求之一;如下示例展示了获取当前时间与当天日期的输出:
SELECT NOW() AS now_dt, CURDATE() AS today;
对日期进行偏移是常见操作,例如想要获得未来一周的日期、或在某个日期基础上增加天数:
SELECT DATE_ADD('2025-01-01', INTERVAL 7 DAY) AS next_week;
日期差异计算用于衡量时间跨度,DATEDIFF 以天为单位返回两个日期之间的天数:
SELECT DATEDIFF('2025-12-31','2025-01-01') AS diff_days;
如果需要按时间单位比较两个时间点,TIMESTAMPDIFF 可以按天、小时、分钟等单位返回差值:
SELECT TIMESTAMPDIFF(DAY, '2025-01-01', '2025-12-31') AS days_between;
2.4 条件与聚合函数
条件函数和聚合函数是进行逻辑判断与分组汇总的核心工具。常用的条件函数有 IF、CASE、NULLIF、COALESCE,聚合函数包括 SUM、AVG、MIN、MAX、COUNT、GROUP_CONCAT。
IF 与 CASE 提供分支逻辑,适用于简单条件判断与分支输出;NULLIF 用于将两个值相等时返回 NULL,COALESCE 用于从一组值中选择第一个非 NULL 的值。
SELECT IF(active = 1, 'Yes', 'No') AS is_active
FROM users;
SELECT CASE WHEN score >= 90 THEN 'A'WHEN score >= 75 THEN 'B'ELSE 'C' END AS grade
FROM exams;
SELECT COALESCE(middle_name, 'N/A') AS middle
FROM users;
SELECT NULLIF(email, '') AS email_clean
FROM users;
聚合函数用于对分组后的数据进行汇总计算,常见场景包括销售额、评分、计数等。GROUP BY 常与聚合函数搭配使用,以实现分组汇总。
SELECT department, SUM(sales) AS total_sales
FROM orders
GROUP BY department;
SELECT AVG(rating) AS avg_rating, MAX(rating) AS max_rating
FROM reviews;
SELECT GROUP_CONCAT(DISTINCT country) AS countries
FROM customers;
2.5 查询实战示例
将前面学到的函数组合起来,在实际业务查询中实现常见需求。下列示例覆盖汇总、文本处理、日期分组等多种场景,均包含可直接执行的 SQL。
示例 A:按地区汇总某一年度的总销售额,并按照降序排序,便于快速识别高价值区域。使用 SUM、GROUP BY、ORDER BY 的组合。
SELECT region, SUM(amount) AS total_sales
FROM orders
WHERE order_date BETWEEN '2025-01-01' AND '2025-12-31'
GROUP BY region
ORDER BY total_sales DESC;
示例 B:对用户邮箱进行遮蔽以保护隐私,同时保持显示的可读性。结合 SUBSTR/RIGHT 与 CONCAT 实现简单的掩码效果。
SELECT CONCAT(SUBSTR(email, 1, 3), '***@', RIGHT(email, 3)) AS masked_email
FROM users
LIMIT 5;
示例 C:按月聚合销售额,并动态格式化日期维度,便于报表呈现。结合 DATE_FORMAT 与 GROUP BY。
SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, SUM(amount) AS monthly_sales
FROM orders
GROUP BY DATE_FORMAT(order_date, '%Y-%m')
ORDER BY month;
示例 D:在聚合计算中安全处理空值,确保金额统计的准确性。使用 COALESCE 将 NULL 转为 0。
SELECT customer_id, SUM(COALESCE(amount, 0)) AS total_spent
FROM orders
GROUP BY customer_id;



