概述
以下是 MySQL 中常用函数的分类及示例,涵盖字符串处理、数值计算、日期操作、条件判断等常见场景:
一、字符串函数
1. CONCAT(str1, str2, ...)
拼接字符串。
sql
SELECT CONCAT('Hello', ' ', 'World'); -- 输出: Hello World
2. SUBSTRING(str, start, length)
截取子字符串。
sql
SELECT SUBSTRING('MySQL', 3, 2); -- 输出: 'SQ'
3. LENGTH(str)
返回字符串字节数(注意字符集)。
sql
SELECT LENGTH('数据库'); -- UTF8 下输出: 9(每个汉字3字节)
4. CHAR_LENGTH(str)
返回字符数。
sql
SELECT CHAR_LENGTH('数据库'); -- 输出: 3
5. REPLACE(str, old, new)
替换字符串中的内容。
sql
SELECT REPLACE('apple banana', 'apple', 'orange'); -- 输出: 'orange banana'
6. LOWER(str)
/ UPPER(str)
转换大小写。
sql
SELECT LOWER('MySQL'); -- 输出: 'mysql'
7. TRIM([BOTH | LEADING | TRAILING] trim_str FROM str)
去除首尾指定字符。
sql
SELECT TRIM(BOTH '#' FROM '##MySQL##'); -- 输出: 'MySQL'
二、数值函数
1. ROUND(num, decimals)
四舍五入到指定小数位。
sql
SELECT ROUND(3.1415, 2); -- 输出: 3.14
2. CEIL(num)
/ FLOOR(num)
向上/向下取整。
sql
SELECT CEIL(3.2); -- 输出: 4
3. ABS(num)
返回绝对值。
sql
SELECT ABS(-10); -- 输出: 10
4. RAND()
生成 0~1 之间的随机数。
sql
SELECT RAND(); -- 输出: 0.1234 (随机值)
5. POW(base, exponent)
幂运算。
sql
SELECT POW(2, 3); -- 输出: 8
三、日期与时间函数
1. NOW()
返回当前日期和时间。
sql
SELECT NOW(); -- 输出: '2023-10-05 14:30:00'
2. CURDATE()
/ CURTIME()
返回当前日期或时间。
sql
SELECT CURDATE(); -- 输出: '2023-10-05'
3. DATE_FORMAT(date, format)
格式化日期。
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 输出: '2023-10-05 14:30:00'
4. DATEDIFF(date1, date2)
计算两个日期的天数差。
sql
SELECT DATEDIFF('2023-10-10', '2023-10-05'); -- 输出: 5
5. DATE_ADD(date, INTERVAL expr unit)
日期加法。
sql
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY); -- 输出: 当前时间 + 7天
四、条件判断函数
1. IF(condition, value_if_true, value_if_false)
简单条件判断。
sql
SELECT IF(score >= 60, '及格', '不及格') FROM students;
2. CASE WHEN
多条件分支判断。
sql
SELECT
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS grade
FROM students;
3. COALESCE(value1, value2, ...)
返回第一个非 NULL 的值。
sql
SELECT COALESCE(NULL, '默认值'); -- 输出: '默认值'
4. IFNULL(value, default_value)
若值为 NULL,返回默认值。
sql
SELECT IFNULL(null_column, 0) FROM table;
五、聚合函数
1. SUM(column)
求和。
sql
SELECT SUM(sales) FROM orders;
2. AVG(column)
求平均值。
sql
SELECT AVG(score) FROM students;
3. COUNT(column)
统计行数(NULL 值不计数)。
sql
SELECT COUNT(*) FROM users; -- 统计总行数
4. MAX(column)
/ MIN(column)
返回最大/最小值。
sql
SELECT MAX(price) FROM products;
5. GROUP_CONCAT(column SEPARATOR separator)
合并分组中的字符串。
sql
SELECT GROUP_CONCAT(username SEPARATOR ', ') FROM users GROUP BY dept_id;
六、窗口函数(MySQL 8.0+)
1. ROW_NUMBER()
为结果集中的行生成序号。
sql
SELECT ROW_NUMBER() OVER (ORDER BY score DESC) AS rank, username, score FROM students;
2. RANK()
/ DENSE_RANK()
排名函数(允许并列)。
sql
SELECT RANK() OVER (ORDER BY sales DESC) AS sales_rank FROM orders;
3. LEAD(column, offset) / LAG(column, offset)
访问当前行的前/后某行数据。
sql
SELECT LAG(amount) OVER (ORDER BY date) AS prev_amount FROM sales;
七、其他实用函数
1. JSON_EXTRACT(json_doc, path)
提取 JSON 数据。
sql
SELECT JSON_EXTRACT('{"name": "John", "age": 30}', '$.name'); -- 输出: "John"
2. INET_ATON(ip_address)
将 IP 地址转换为整数。
sql
SELECT INET_ATON('192.168.1.1'); -- 输出: 3232235777
3. MD5(str)
计算 MD5 哈希值。
sql
SELECT MD5('password'); -- 输出: 32位哈希字符串
总结
• 根据具体场景选择函数,例如字符串处理用 SUBSTRING
,日期计算用 DATE_ADD
。
• 注意函数对 NULL 值的处理(如 COALESCE
和 IFNULL
)。
• 窗口函数需 MySQL 8.0+ 支持,低版本可改用自连接或子查询实现类似功能。