MySQL函数是在数据库操作中用于处理数据、执行计算和转换数据格式的工具,在查询、更新和管理数据库时起着关键作用。 MySQL函数分为以下几类:
一、数学函数
用于数值计算,支持基本运算、幂根、三角函数等。
- 基本运算
ABS(x):返回绝对值,如ABS(-5)→5。ROUND(x,d):四舍五入到指定小数位,如ROUND(3.1415, 2)→3.14。TRUNCATE(x,d):截断小数位,不四舍五入,如TRUNCATE(3.99, 0)→3。
- 取整函数
CEIL(x)/CEILING(x):向上取整,如CEIL(3.1)→4。FLOOR(x):向下取整,如FLOOR(3.9)→3。
- 幂与根
POWER(x,y)/POW(x,y):计算 x 的 y 次方,如POWER(2,3)→8。SQRT(x):平方根,如SQRT(16)→4。
- 随机数
RAND():生成 0~1 之间的随机浮点数,如RAND()→0.78234。RAND(seed):指定种子值生成固定随机序列(用于测试)。
- 三角函数
SIN(x)、COS(x)、TAN(x):参数为弧度,如SIN(PI()/2)→1。
二、字符串函数
处理文本数据,包括拼接、截取、替换等操作。
- 拼接与截取
CONCAT(str1, str2, ...):连接多个字符串,如CONCAT('Hello', ' ', 'World')→'Hello World'。SUBSTRING(str, pos, len):从pos位置开始截取长度为len的子串(位置从 1 开始),如SUBSTRING('MySQL', 2, 3)→'ySQ'。LEFT(str, len)/RIGHT(str, len):分别取左/右侧len个字符,如LEFT('Apple', 3)→'App'。
- 大小写转换
UPPER(str)/LOWER(str):转换大小写,如UPPER('mysql')→'MYSQL'。
- 长度与位置
LENGTH(str):返回字节长度(多字节字符占多个字节),如LENGTH('你好')→6(UTF - 8 中一个汉字占 3 字节)。CHAR_LENGTH(str):返回字符长度,如CHAR_LENGTH('你好')→2。POSITION(substr IN str):返回子串首次出现的位置,如POSITION('bc' IN 'abcde')→2。
- 修剪与替换
TRIM([remstr FROM] str):删除字符串首尾的remstr(默认删除空格),如TRIM(' abc ')→'abc'。REPLACE(str, from_str, to_str):替换所有匹配的子串,如REPLACE('abab', 'a', 'x')→'xbxb'。
三、日期与时间函数
处理日期和时间值,支持格式化、计算和提取部分。
- 获取当前时间
NOW()/CURRENT_TIMESTAMP():返回当前日期时间,如NOW()→2023 - 10 - 01 14:30:25。CURDATE()/CURTIME():分别返回当前日期和时间,如CURDATE()→2023 - 10 - 01。
- 提取部分
YEAR(date)、MONTH(date)、DAY(date):提取年、月、日,如YEAR('2023 - 10 - 01')→2023。HOUR(time)、MINUTE(time)、SECOND(time):提取时、分、秒,如MINUTE('14:30:25')→30。
- 日期计算
DATE_ADD(date, INTERVAL expr unit)/DATE_SUB(date, INTERVAL expr unit):日期加减,如DATE_ADD('2023 - 10 - 01', INTERVAL 1 DAY)→2023 - 10 - 02。DATEDIFF(date1, date2):计算天数差(date1 - date2),如DATEDIFF('2023 - 10 - 05', '2023 - 10 - 01')→4。
- 格式化
DATE_FORMAT(date, format):按指定格式输出日期,如DATE_FORMAT('2023 - 10 - 01', '%Y年%m月%d日')→'2023年10月01日'。
四、条件判断函数
用于逻辑判断和返回不同结果。
- IF 语句
IF(condition, value_if_true, value_if_false):条件判断,如IF(5 > 3, 'Yes', 'No')→'Yes'。
- NULL 值处理
IFNULL(expr1, expr2):若expr1为NULL,则返回expr2,如IFNULL(NULL, 'Default')→'Default'。COALESCE(val1, val2, ...):返回第一个非NULL值,如COALESCE(NULL, 1, 2)→1。
- CASE 语句
- 简单 CASE:
CASE expr WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default_result END - 搜索 CASE:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default_result END
SELECT CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END AS grade FROM students; - 简单 CASE:
五、聚合函数
用于对一组值进行计算并返回单个结果(常用于 GROUP BY 子句)。
COUNT(expr):统计非NULL值的数量,如COUNT(id)统计记录数。SUM(expr):求和,如SUM(sales)计算总销售额。AVG(expr):求平均值,如AVG(age)计算平均年龄。MAX(expr)/MIN(expr):求最大值/最小值,如MAX(price)返回最高价格。
六、类型转换函数
显式转换数据类型。
CAST(expr AS type):将expr转换为指定类型,如CAST('123' AS SIGNED)→123(字符串转整数)。CONVERT(expr, type):功能类似CAST,如CONVERT('2023 - 10 - 01', DATE)→2023 - 10 - 01。
七、加密函数
用于数据加密和哈希。
MD5(str):计算 MD5 哈希值(16 字节),如MD5('password')→'5f4dcc3b5aa765d61d8327deb882cf99'。SHA2(str, hash_length):计算 SHA - 2 哈希值(支持 224/256/384/512 位),如SHA2('password', 256)→'5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d154'。
八、系统信息函数
返回数据库或服务器的元数据。
VERSION():返回 MySQL 版本,如VERSION()→'8.4.0'。USER()/CURRENT_USER():返回当前用户,如USER()→'root@localhost'。DATABASE()/SCHEMA():返回当前数据库名,如DATABASE()→'mydb'。
九、窗口函数
对查询结果的“窗口”(分组)进行计算(MySQL 8.0+ 支持)。
- 排名函数
ROW_NUMBER():为每行分配唯一排名,如ROW_NUMBER() OVER (ORDER BY salary DESC)。RANK():相同值排名相同,后续排名跳过,如RANK() OVER (ORDER BY score DESC)。DENSE_RANK():相同值排名相同,后续排名连续,如DENSE_RANK() OVER (ORDER BY score DESC)。
- 聚合窗口
SUM() OVER (PARTITION BY col ORDER BY col):分组内累加,如计算部门累计销售额。
十、JSON 函数
处理 JSON 类型数据(MySQL 5.7+ 支持)。
JSON_EXTRACT(json_doc, path):提取 JSON 值,如JSON_EXTRACT('{"name":"John","age":30}', '$.age')→30。JSON_SET(json_doc, path, val):修改 JSON 值,如JSON_SET('{"name":"John"}', '$.age', 30)→'{"name":"John","age":30}'。
使用注意事项
- NULL 值处理:多数函数遇到
NULL时返回NULL,需用IFNULL或COALESCE处理。- 示例:
IFNULL(commission, 0)避免commission为NULL导致计算错误。
- 示例:
- 性能优化:避免在索引列上使用函数(如
WHERE YEAR(date_col) = 2023),会导致全表扫描。- 优化方式:
WHERE date_col >= '2023 - 01 - 01' AND date_col < '2024 - 01 - 01'。
- 优化方式:
- 兼容性:部分函数在不同版本中可能有差异,建议查阅对应版本文档。
总结
MySQL 函数是 SQL 查询的核心工具,掌握各类函数(尤其是数学、字符串、日期和聚合函数)能大幅提升数据处理效率。实际应用中需注意函数的参数类型、NULL 值处理及性能影响。完整文档可参考 MySQL 8.4 Functions and Operators。
4309

被折叠的 条评论
为什么被折叠?



