广告

MySQL 函数查询基础讲解:常用函数与查询实战示例

在学习 MySQL 函数查询基础 时,理解常用函数及其在实际查询中的应用方式至关重要。本篇围绕字符串函数数值函数日期与时间函数、以及条件与聚合函数四大类,辅以若干查询实战示例,帮助你在 SELECT、WHERE、GROUP BY、ORDER BY 等语句中高效利用函数实现复杂业务逻辑。

2. 常用函数分类与作用

2.1 字符串函数

字符串函数用于处理文本数据,常见如 CONCATSUBSTRLENGTHTRIMREPLACE 等。通过组合这些函数,可以实现拼接、裁剪、清理空格和大小写转换等常见任务。理解函数的输入与返回值类型,有助于避免字符编码或长度截断带来的错误。

例如,使用 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 数值函数

数值函数用于数字计算和处理,常用有 ROUNDTRUNCATECEILINGFLOORABSPOWERSQRTRAND 等。通过这些函数,可以实现圆整、取整、幂运算、绝对值及随机数生成等操作。

对金额或评分等字段进行小数位处理是日常需求之一,使用 ROUND 可以实现指定小数位的四舍五入:

SELECT ROUND(price, 2) AS price_rounded
FROM products;

需要进行幂运算或平方等运算时,POWERSQRT 提供直接的数学能力:

SELECT POWER(rating, 2) AS rating_sq
FROM reviews;

产生一个介于 0 和 1 之间的随机数时,可以使用 RAND,常用于打乱数据、A/B 测试等场景:

SELECT RAND() AS rnd_value;

2.3 日期与时间函数

日期与时间函数帮助你处理时间戳、日期边界、时间段计算等。核心函数包括 NOWCURDATECURTIMEDATE_ADDDATE_SUBDATEDIFFTIMESTAMPDIFF 等。正确使用日期函数可以实现时间维度的聚合、筛选与格式化输出。

获取当前时间与日期是最基本的需求之一;如下示例展示了获取当前时间与当天日期的输出:

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 条件与聚合函数

条件函数和聚合函数是进行逻辑判断与分组汇总的核心工具。常用的条件函数有 IFCASENULLIFCOALESCE,聚合函数包括 SUMAVGMINMAXCOUNTGROUP_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;

MySQL 函数查询基础讲解:常用函数与查询实战示例

广告

数据库标签