常用 MySQL 函数记录
字符串函数
CONCAT(str1, str2, ...)
将多个字符串连接成一个字符串。
示例:
SELECT CONCAT('Hello', ' ', 'World'); -- 返回 'Hello World'
SELECT CONCAT('Name: ', first_name, ' ', last_name) FROM employees WHERE employee_id = 100;
LENGTH(str) / CHAR_LENGTH(str)
返回字符串的长度(字节数)/字符数。
示例:
SELECT LENGTH('abc'); -- 返回 3
SELECT LENGTH('你好'); -- 在 UTF-8 编码下可能返回 6
SELECT CHAR_LENGTH('你好'); -- 返回 2
SUBSTRING(str, pos, len) / SUBSTR(str, pos, len) / MID(str, pos, len)
从字符串 str 的位置 pos 开始截取长度为 len 的子字符串。
示例:
SELECT SUBSTRING('abcdefg', 2, 3); -- 返回 'bcd'
SELECT SUBSTR('abcdefg', -3, 2); -- 返回 'ef'
SELECT MID('abcdefg', 3, 4); -- 返回 'cdef'
LEFT(str, len) / RIGHT(str, len)
返回字符串 str 最左边/最右边的 len 个字符。
示例:
SELECT LEFT('abcdefg', 3); -- 返回 'abc'
SELECT RIGHT('abcdefg', 2); -- 返回 'fg'
UPPER(str) / LOWER(str)
将字符串 str 转换为大写/小写。
示例:
SELECT UPPER('hello'); -- 返回 'HELLO'
SELECT LOWER('WORLD'); -- 返回 'world'
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
移除字符串 str 开头、结尾或两端的空格或指定的字符串 remstr。
示例:
SELECT TRIM(' hello '); -- 返回 'hello'
SELECT TRIM(LEADING 'x' FROM 'xxxhelloxxx'); -- 返回 'helloxxx'
SELECT TRIM(TRAILING 'x' FROM 'xxxhelloxxx'); -- 返回 'xxxhello'
SELECT TRIM(BOTH 'x' FROM 'xxxhelloxxx'); -- 返回 'hello'
REPLACE(str, from_str, to_str)
将字符串 str 中所有出现的子字符串 from_str 替换为 to_str。
示例:
SELECT REPLACE('[www.mysql.com](https://www.mysql.com)', 'w', 'W'); -- 返回 'WWW.mysql.com'
SELECT REPLACE('Hello World', 'World', 'China'); -- 返回 'Hello China'
LOCATE(substr, str[, pos]) / POSITION(substr IN str) / INSTR(str, substr)
返回子字符串 substr 在字符串 str 中第一次出现的位置。
示例:
SELECT LOCATE('b', 'abcde'); -- 返回 2
SELECT LOCATE('b', 'abcde', 3); -- 返回 0
SELECT POSITION('c' IN 'abcde'); -- 返回 3
SELECT INSTR('abcde', 'd'); -- 返回 4
数值函数
ABS(x)
返回 x 的绝对值。
示例:
SELECT ABS(-10); -- 返回 10
SELECT ABS(5); -- 返回 5
CEIL(x) / CEILING(x)
返回大于或等于 x 的最小整数。
示例:
SELECT CEIL(3.14); -- 返回 4
SELECT CEILING(-3.14); -- 返回 -3
FLOOR(x)
返回小于或等于 x 的最大整数。
示例:
SELECT FLOOR(3.14); -- 返回 3
SELECT FLOOR(-3.14); -- 返回 -4
ROUND(x[, d])
将 x 四舍五入到 d 位小数。
示例:
SELECT ROUND(3.14159, 2); -- 返回 3.14
SELECT ROUND(3.5); -- 返回 4
SELECT ROUND(3.4); -- 返回 3
MOD(n, m) / n % m / n MOD m
返回 n 除以 m 的余数。
示例:
SELECT MOD(10, 3); -- 返回 1
SELECT 10 % 3; -- 返回 1
SELECT 10 MOD 3; -- 返回 1
RAND()
返回一个 0 到 1 之间的随机浮点数。
示例:
SELECT RAND(); -- 每次执行返回不同的随机数
SELECT RAND() * 100; -- 返回 0 到 100 之间的随机数
TRUNCATE(x, d)
将数字 x 截断到 d 位小数。
示例:
SELECT TRUNCATE(3.14159, 2); -- 返回 3.14
SELECT TRUNCATE(3.999, 0); -- 返回 3
日期和时间函数
NOW() / SYSDATE()
返回当前日期和时间。
示例:
SELECT NOW(); -- 例如:'2025-04-23 16:10:00'
SELECT SYSDATE(); -- 例如:'2025-04-23 16:10:00'
CURDATE() / CURRENT_DATE()
返回当前日期。
示例:
SELECT CURDATE(); -- 例如:'2025-04-23'
SELECT CURRENT_DATE(); -- 例如:'2025-04-23'
CURTIME() / CURRENT_TIME()
返回当前时间。
示例:
SELECT CURTIME(); -- 例如:'16:10:00'
SELECT CURRENT_TIME(); -- 例如:'16:10:00'
DATE(datetime)
提取日期时间表达式的日期部分。
示例:
SELECT DATE('2025-04-23 16:10:00'); -- 返回 '2025-04-23'
TIME(datetime)
提取日期时间表达式的时间部分。
示例:
SELECT TIME('2025-04-23 16:10:00'); -- 返回 '16:10:00'
YEAR(date) / MONTH(date) / DAY(date)
返回日期或日期时间表达式的年份/月份/日。
示例:
SELECT YEAR('2025-04-23'); -- 返回 2025
SELECT MONTH('2025-04-23'); -- 返回 4
SELECT DAY('2025-04-23'); -- 返回 23
HOUR(time) / MINUTE(time) / SECOND(time)
返回时间或日期时间表达式的小时/分钟/秒。
示例:
SELECT HOUR('16:10:00'); -- 返回 16
SELECT MINUTE('16:10:00'); -- 返回 10
SELECT SECOND('16:10:00'); -- 返回 0
DATE_FORMAT(date, format)
根据指定的 format 格式化日期或日期时间值。
示例:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 返回 '2025-04-23 16:10:00'
SELECT DATE_FORMAT(CURDATE(), '%d/%m/%Y'); -- 返回 '23/04/2025'
SELECT DATE_FORMAT(CURTIME(), '%h:%i %p'); -- 返回 '04:10 PM'
DATE_ADD(date, INTERVAL expr unit) / DATE_SUB(date, INTERVAL expr unit)
在日期上添加或减去指定的时间间隔。
示例:
SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY); -- 返回七天后的日期
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR); -- 返回一小时前的时间
SELECT DATE_ADD('2025-04-23', INTERVAL '1-2' YEAR_MONTH); -- 返回 '2026-06-23'
DATEDIFF(date1, date2)
返回 date1 和 date2 之间的天数差。
示例:
SELECT DATEDIFF('2025-04-30', '2025-04-23'); -- 返回 7
SELECT DATEDIFF('2025-04-23', '2025-04-30'); -- 返回 -7
TIME_FORMAT(time, format)
根据指定的 format 格式化时间值。
示例:
SELECT TIME_FORMAT(CURTIME(), '%H:%i:%s'); -- 返回 '16:10:00'
SELECT TIME_FORMAT('10:30:00', '%h:%i %p'); -- 返回 '10:30 AM'
聚合函数
COUNT([DISTINCT] expr)
返回满足条件的行数。
示例:
SELECT COUNT(*) FROM employees;
SELECT COUNT(department_id) FROM employees;
SELECT COUNT(DISTINCT department_id) FROM employees;
SUM(expr)
返回指定列的总和。
示例:
SELECT SUM(salary) FROM employees;
SELECT SUM(order_amount) FROM orders WHERE customer_id = 123;
AVG(expr)
返回指定列的平均值。
示例:
SELECT AVG(salary) FROM employees;
SELECT AVG(grade) FROM student_scores WHERE class_id = 'A';
MIN(expr)
返回指定列的最小值。
示例:
SELECT MIN(salary) FROM employees;
SELECT MIN(order_date) FROM orders;
MAX(expr)
返回指定列的最大值。
示例:
SELECT MAX(salary) FROM employees;
SELECT MAX(order_date) FROM orders;
GROUP_CONCAT([DISTINCT] expr [,separator ORDER BY {col_name | expr} [ASC | DESC] [, ...]] [SEPARATOR str])
将每个分组中的值连接成一个字符串。
示例:
SELECT department_id, GROUP_CONCAT(last_name ORDER BY last_name SEPARATOR ', ')
FROM employees
GROUP BY department_id;
SELECT GROUP_CONCAT(DISTINCT country) FROM customers;
控制流函数
IF(expr1, expr2, expr3)
如果 expr1 为真,则返回 expr2,否则返回 expr3。
示例:
SELECT IF(salary > 5000, 'High', 'Low') AS salary_level FROM employees;
IFNULL(expr1, expr2)
如果 expr1 为 NULL,则返回 expr2,否则返回 expr1。
示例:
SELECT IFNULL(commission_pct, 0) FROM employees;
NULLIF(expr1, expr2)
如果 expr1 等于 expr2,则返回 NULL,否则返回 expr1。
示例:
SELECT NULLIF(order_qty, shipped_qty) FROM orders WHERE order_id = 101;
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END
类似于 switch 语句。
示例:
SELECT
order_status,
CASE order_status
WHEN 'Shipped' THEN '已发货'
WHEN 'Pending' THEN '待处理'
WHEN 'Cancelled' THEN '已取消'
ELSE '未知状态'
END AS status_description
FROM orders;
CASE WHEN condition THEN result [WHEN condition THEN result ...] [ELSE result] END
类似于 if-else if-...-else 语句。
示例:
SELECT
salary,
CASE
WHEN salary >= 10000 THEN '优秀'
WHEN salary >= 8000 THEN '良好'
WHEN salary >= 6000 THEN '及格'
ELSE '不及格'
END AS performance
FROM employees;
其他常用函数
VERSION()
返回 MySQL 服务器的版本。
示例:
SELECT VERSION();
DATABASE() / SCHEMA()
返回当前数据库名。
示例:
SELECT DATABASE();
SELECT SCHEMA();
USER() / CURRENT_USER()
返回当前 MySQL 用户名和主机名。
示例:
SELECT USER();
SELECT CURRENT_USER();
LAST_INSERT_ID()
返回最近一次 INSERT 操作自动生成的主键值。
示例:
INSERT INTO products (name) VALUES ('New Product');
SELECT LAST_INSERT_ID();
MD5(str)
计算字符串 str 的 MD5 哈希值。
示例:
SELECT MD5('password123');

浙公网安备 33010602011771号