1. 聚合函数
用于对一组数据进行计算,返回单个值,常与 GROUP BY 结合使用。忽略 NULL 值(除 COUNT(*) 外)。
| 函数名 | 描述 | 示例 |
|---|---|---|
SUM(column) | 计算列值总和(忽略 NULL) | SELECT SUM(price) FROM orders; |
AVG(column) | 计算列值平均值(忽略 NULL) | SELECT AVG(score) FROM students; |
COUNT(*) | 统计行数(* 统计总行数) | SELECT COUNT(*) FROM students; |
MIN(column) | 返回列最小值 | SELECT MIN(price) FROM products; |
MAX(column) | 返回列最大值 | SELECT MAX(salary) FROM employees; |
GROUP_CONCAT(column) | 将分组值连接为字符串(可指定分隔符) | SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM users GROUP BY dept; |
STDDEV(column) | 计算标准差(样本标准差) | SELECT STDDEV(score) FROM students; |
VARIANCE(column) | 计算方差 | SELECT VARIANCE(score) FROM students; |
STDDEV_POP(column) | 计算总体标准差 | SELECT STDDEV_POP(score) FROM students; |
VAR_POP(column) | 计算总体方差 | SELECT VAR_POP(score) FROM students; |
2. 数值函数
用于处理数值计算,包括取整、截断、数学运算等。扩展添加 TRUNCATE、MOD、PI、EXP、LOG 等函数。
| 函数名 | 描述 | 示例 |
|---|---|---|
ROUND(number, decimals) | 四舍五入到指定小数位(默认 0) | SELECT ROUND(123.456, 2); |
TRUNCATE(number, decimals) | 截断到指定小数位(不四舍五入) | SELECT TRUNCATE(123.456, 2); |
FLOOR(number) | 向下取整 | SELECT FLOOR(123.456); |
CEIL(number) | 向上取整 | SELECT CEIL(123.456); |
ABS(number) | 返回绝对值 | SELECT ABS(-123); |
RAND() | 生成 0 到 1 的随机数 | SELECT RAND(); |
POW(base, exponent) | 计算幂 | SELECT POW(2, 3); |
MOD(dividend, divisor) | 计算余数(取模) | SELECT MOD(10, 3); |
PI() | 返回 π 值 | SELECT PI(); |
EXP(number) | 计算 e 的 number 次方 | SELECT EXP(1); |
LOG(number) | 计算自然对数 | SELECT LOG(EXP(1)); |
LOG10(number) | 计算以 10 为底的对数 | SELECT LOG10(100); |
SQRT(number) | 计算平方根 | SELECT SQRT(16); |
SIGN(number) | 返回符号(-1/0/1) | SELECT SIGN(-5); |
3. 字符串函数
用于处理字符串操作,包括连接、替换、提取等。扩展添加 LEFT、RIGHT、LPAD、RPAD、INSTR、LOCATE 等。
| 函数名 | 描述 | 示例 |
|---|---|---|
CONCAT(str1, str2, ...) | 连接多个字符串 | SELECT CONCAT('Hello', ' ', 'World'); |
REPLACE(str, from_str, to_str) | 替换子字符串 | SELECT REPLACE('Old Phone', 'Old', 'New'); |
SUBSTRING(str, start, length) | 提取子字符串(从 1 开始) | SELECT SUBSTRING('Hello World', 1, 5); |
LENGTH(str) | 返回字符串字节长度(多字节字符注意) | SELECT LENGTH('中文'); |
UPPER(str) | 转换为大写 | SELECT UPPER('hello'); |
LOWER(str) | 转换为小写 | SELECT LOWER('HELLO'); |
TRIM(str) | 去除两端空格 | SELECT TRIM(' hello '); |
LEFT(str, length) | 从左提取指定长度子字符串 | SELECT LEFT('Hello World', 5); |
RIGHT(str, length) | 从右提取指定长度子字符串 | SELECT RIGHT('Hello World', 5); |
LPAD(str, length, pad_str) | 左填充到指定长度 | SELECT LPAD('123', 5, '0'); |
RPAD(str, length, pad_str) | 右填充到指定长度 | SELECT RPAD('123', 5, '0'); |
INSTR(str, substr) | 返回子字符串首次出现位置(从 1 开始) | SELECT INSTR('Hello World', 'World'); |
LOCATE(substr, str) | 与 INSTR 类似,返回位置 | SELECT LOCATE('World', 'Hello World'); |
REVERSE(str) | 反转字符串 | SELECT REVERSE('hello'); |
4. 日期和时间函数
用于处理日期和时间,包括当前时间、格式化、计算等。扩展添加提取函数如 YEAR、MONTH 等,以及 TIMESTAMP、WEEKDAY 等。
| 函数名 | 描述 | 示例 |
|---|---|---|
NOW() | 返回当前日期和时间 | SELECT NOW(); |
CURDATE() | 返回当前日期 | SELECT CURDATE(); |
CURTIME() | 返回当前时间 | SELECT CURTIME(); |
DATE_FORMAT(date, format) | 格式化日期 | SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); |
DATEDIFF(date1, date2) | 计算日期差(天) | SELECT DATEDIFF('2025-08-23', '2025-08-20'); |
DATE_ADD(date, INTERVAL value unit) | 日期加法 | SELECT DATE_ADD('2025-08-23', INTERVAL 1 DAY); |
DATE_SUB(date, INTERVAL value unit) | 日期减法 | SELECT DATE_SUB('2025-08-23', INTERVAL 1 MONTH); |
YEAR(date) | 提取年份 | SELECT YEAR('2025-08-23'); |
MONTH(date) | 提取月份 | SELECT MONTH('2025-08-23'); |
DAY(date) | 提取日期(天) | SELECT DAY('2025-08-23'); |
HOUR(time) | 提取小时 | SELECT HOUR('17:46:00'); |
MINUTE(time) | 提取分钟 | SELECT MINUTE('17:46:00'); |
SECOND(time) | 提取秒 | SELECT SECOND('17:46:00'); |
TIMESTAMP(date) | 将日期转换为时间戳 | SELECT TIMESTAMP('2025-08-23'); |
WEEKDAY(date) | 返回星期几(0=周一,6=周日) | SELECT WEEKDAY('2025-08-23'); |
5. 逻辑和条件函数
用于条件判断和 NULL 处理。扩展添加 ELT、FIELD 等。
| 函数名 | 描述 | 示例 |
|---|---|---|
IF(condition, value_if_true, value_if_false) | 三元条件判断 | SELECT IF(10 > 5, '是', '否'); |
IFNULL(expr1, expr2) | 如果 expr1 为 NULL,返回 expr2 | SELECT IFNULL(NULL, '默认值'); |
NULLIF(expr1, expr2) | 如果 expr1 = expr2,返回 NULL | SELECT NULLIF('test', 'test'); |
CASE | 多条件分支(简单或搜索形式) | SELECT CASE WHEN score >= 60 THEN '及格' ELSE '不及格' END FROM students; |
ELT(index, str1, str2, ...) | 根据索引返回字符串 | SELECT ELT(2, '苹果', '香蕉', '橙子'); |
FIELD(str, str1, str2, ...) | 返回 str 在列表中的位置(从 1 开始) | SELECT FIELD('香蕉', '苹果', '香蕉', '橙子'); |
6. 类型转换函数
用于数据类型转换。扩展添加 BINARY、CHAR 等。
| 函数名 | 描述 | 示例 |
|---|---|---|
CAST(expr AS type) | 将表达式转换为指定类型 | SELECT CAST('123.45' AS DECIMAL(10,2)); |
CONVERT(expr, type) | 类似 CAST,支持更多类型 | SELECT CONVERT('2025-08-23', DATE); |
BINARY(str) | 转换为二进制字符串 | SELECT BINARY('hello'); |
CHAR(number USING charset) | 将 ASCII 值转换为字符 | SELECT CHAR(65); |
HEX(str) | 返回十六进制字符串 | SELECT HEX('hello'); |
7. 其他常用函数
包括杂项函数,如加密、系统信息等。扩展添加 UUID、MD5、SHA1、VERSION 等。
| 函数名 | 描述 | 示例 |
|---|---|---|
COALESCE(expr1, expr2, ...) | 返回第一个非 NULL 值 | SELECT COALESCE(NULL, NULL, '默认值'); |
ISNULL(expr) | 判断是否为 NULL(1 是,0 否) | SELECT ISNULL(NULL); |
GREATEST(value1, value2, ...) | 返回最大值 | SELECT GREATEST(10, 20, 15); |
LEAST(value1, value2, ...) | 返回最小值 | SELECT LEAST(10, 20, 15); |
UUID() | 生成唯一 UUID | SELECT UUID(); |
MD5(str) | 计算 MD5 哈希值 | SELECT MD5('password'); |
SHA1(str) | 计算 SHA-1 哈希值 | SELECT SHA1('password'); |
VERSION() | 返回 MySQL 版本 | SELECT VERSION(); |
DATABASE() | 返回当前数据库名 | SELECT DATABASE(); |
USER() | 返回当前用户 | SELECT USER(); |
注意事项
- NULL 处理:聚合函数忽略 NULL 值;使用
IFNULL或COALESCE处理 NULL。 - 性能:对大表使用复杂函数需注意性能,添加索引或分批查询。
- 字符集:字符串函数返回字节数,处理多字节字符(如中文)需注意
CHAR_LENGTH()替代LENGTH()以获取字符数。 - 兼容性:部分函数为 MySQL 特有,跨数据库需验证。参考 MySQL 官方文档以获取完整列表。
- 示例假设:日期/时间示例基于 2025-08-23;数值示例为简单常量。