MySQL 常用函数分类

170 阅读5分钟

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. 数值函数

用于处理数值计算,包括取整、截断、数学运算等。扩展添加 TRUNCATEMODPIEXPLOG 等函数。

函数名描述示例
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. 字符串函数

用于处理字符串操作,包括连接、替换、提取等。扩展添加 LEFTRIGHTLPADRPADINSTRLOCATE 等。

函数名描述示例
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. 日期和时间函数

用于处理日期和时间,包括当前时间、格式化、计算等。扩展添加提取函数如 YEARMONTH 等,以及 TIMESTAMPWEEKDAY 等。

函数名描述示例
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 处理。扩展添加 ELTFIELD 等。

函数名描述示例
IF(condition, value_if_true, value_if_false)三元条件判断SELECT IF(10 > 5, '是', '否');
IFNULL(expr1, expr2)如果 expr1 为 NULL,返回 expr2SELECT IFNULL(NULL, '默认值');
NULLIF(expr1, expr2)如果 expr1 = expr2,返回 NULLSELECT 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. 类型转换函数

用于数据类型转换。扩展添加 BINARYCHAR 等。

函数名描述示例
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. 其他常用函数

包括杂项函数,如加密、系统信息等。扩展添加 UUIDMD5SHA1VERSION 等。

函数名描述示例
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()生成唯一 UUIDSELECT 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 值;使用 IFNULLCOALESCE 处理 NULL。
  • 性能:对大表使用复杂函数需注意性能,添加索引或分批查询。
  • 字符集:字符串函数返回字节数,处理多字节字符(如中文)需注意 CHAR_LENGTH() 替代 LENGTH() 以获取字符数。
  • 兼容性:部分函数为 MySQL 特有,跨数据库需验证。参考 MySQL 官方文档以获取完整列表。
  • 示例假设:日期/时间示例基于 2025-08-23;数值示例为简单常量。