mysql函数有哪些(MySQL函数列表)


MySQL作为广泛应用的关系型数据库管理系统,其函数体系是支撑复杂业务逻辑和数据处理的核心工具。从基础运算到高级数据分析,MySQL函数覆盖了数据操作的全场景,既是优化查询效率的关键手段,也是实现业务规则的重要载体。其函数分类可归纳为字符串处理、日期时间、数学运算、聚合分析、流程控制、加密安全、JSON处理及窗口函数八大类,每类函数均针对不同数据类型和业务需求设计,兼具灵活性和功能性。例如,字符串函数支持文本清洗与格式化,日期函数实现时间维度计算,而窗口函数则满足分组内排名与分析需求。值得注意的是,MySQL函数的设计遵循“轻量级”原则,多数函数仅依赖基础语法即可调用,但部分高级功能(如JSON处理)需特定版本支持。在实际开发中,合理选择函数能显著提升SQL执行效率,例如使用MD5()替代自定义哈希算法,或通过IFNULL()简化空值处理逻辑。然而,函数滥用可能导致性能瓶颈,需结合索引优化和执行计划分析。以下将从八个维度深入剖析MySQL函数的特性与应用场景。
一、字符串处理函数:文本清洗与格式化
字符串函数用于处理CHAR、VARCHAR等文本类型数据,涵盖截取、拼接、替换、大小写转换等操作,是数据清洗和标准化的核心工具。
函数名 | 功能描述 | 典型参数 | 返回值类型 |
---|---|---|---|
CONCAT(str1, str2, ...) | 拼接多个字符串 | 'abc', 'def' | VARCHAR |
SUBSTRING(str, pos, len) | 截取子串 | 'abcdef', 2, 3 → 'bcd' | VARCHAR |
REPLACE(str, src, dest) | 替换指定子串 | 'abcabc', 'a', 'A' → 'Abcbcb' | VARCHAR |
示例场景:电商平台订单表中,使用TRIM()去除用户地址字段首尾空格,通过LOWER()统一存储邮件地址为小写,避免重复数据。对于包含特殊字符的文本,REGEXP_REPLACE可实现正则替换,如将手机号格式化为标准格式。
二、日期时间函数:时间维度计算与转换
日期函数支持DATE、DATETIME、TIMESTAMP等类型的数据操作,涉及格式转换、时间差计算、提取时间片段等功能。
函数名 | 功能描述 | 典型参数 | 返回值类型 |
---|---|---|---|
NOW() | 当前时间戳 | 无 | DATETIME |
DATEDIFF(a, b) | 计算日期差(天) | '2024-01-01', '2023-12-31' → 1 | INT |
DATE_FORMAT(date, fmt) | 格式化日期 | '2024-01-01', '%Y-%m' → '2024-01' | VARCHAR |
示例场景:物联网设备日志表中,使用UNIX_TIMESTAMP()将时间转换为数值类型以便于排序,通过DATE_ADD()计算设备下次维护周期。在跨时区应用中,CONVERT_TZ()可统一时间标准,避免时区偏差导致的数据统计错误。
三、数学函数:数值计算与精度处理
数学函数覆盖基础运算、三角函数、随机数生成等,适用于科学计算和数据校验场景。
函数名 | 功能描述 | 典型参数 | 返回值类型 |
---|---|---|---|
ROUND(num, decimals) | 四舍五入 | 3.1415, 2 → 3.14 | DECIMAL |
MOD(a, b) | 取模运算 | 10, 3 → 1 | INT |
POWER(x, y) | 幂运算 | 2, 3 → 8 | DOUBLE |
示例场景:金融系统中,使用CEIL()计算利息上限,FLOOR()处理最小额度限制。在游戏开发中,RAND()生成随机掉落概率,ABS()计算角色与目标的距离差。对于高精度需求,如电商价格计算,需结合DECIMAL类型和ROUND()避免浮点误差。
四、聚合函数:数据统计与分组分析
聚合函数用于多行数据汇总,常与GROUP BY配合,支持累计、平均值、最大值等统计操作。
函数名 | 功能描述 | 典型参数 | 返回值类型 |
---|---|---|---|
SUM(expr) | 求和 | salary → 总工资 | DECIMAL |
AVG(expr) | 平均值 | score → 平均分 | DOUBLE |
COUNT(expr) | 计数 | id → 记录数 | INT |
示例场景:销售报表中,按月份分组后使用SUM()统计每月销售额,MAX()获取最高单笔订单金额。在实时监控场景,COUNT(DISTINCT ip)可统计独立访客数。需注意聚合函数自动忽略NULL值,若需包含空值需使用COALESCE预处理。
五、流程控制函数:逻辑判断与动态执行
流程函数实现条件判断和动态SQL生成,增强查询的灵活性和可配置性。
函数名 | 功能描述 | 典型参数 | 返回值类型 |
---|---|---|---|
IF(cond, true_val, false_val) | 条件判断 | age > 18, 'Adult', 'Minor' | VARCHAR/NUMBER |
CASE WHEN cond THEN res END | 多条件分支 | score > 90 → 'A' | VARCHAR/NUMBER |
IIF(expr, true_val, false_val) | 简化版IF(部分DB支持) | col IS NOT NULL, 1, 0 | INT |
示例场景:动态报表生成时,使用CASE语句将状态码转换为中文描述。在权限系统中,IF(USER_TYPE=1, 'Admin', 'User')实现角色标识转换。需注意嵌套条件可能影响性能,复杂逻辑建议通过存储过程处理。
六、加密与哈希函数:数据安全与完整性验证
加密函数用于保护敏感数据,哈希函数常用于数据签名和去重。
函数名 | 功能描述 | 典型参数 | 返回值类型 |
---|---|---|---|
MD5(str) | 生成32位小写哈希 | 'password' → '5f4dcc3b5aa765d61d8327deb882cf99' | CHAR(32) |
SHA2(str, hash_length) | 可变长度哈希 | 'password', 256 → 64字符十六进制串 | VARCHAR |
AES_ENCRYPT(str, key) | AES加密(需配置) | 'secret', 'key123' → 二进制数据 | BLOB |
示例场景:用户表存储密码时,使用SHA2(password, 256)替代明文存储。在数据传输中,RADLOAD_KEY('mykey')生成随机密钥用于AES_ENCRYPT。需注意哈希函数不可逆,若需解密必须使用对称加密算法并妥善管理密钥。
七、JSON处理函数:结构化数据解析与生成
自MySQL 5.7起支持JSON函数,用于NoSQL与关系型数据的结合场景。
函数名 | 功能描述 | 典型参数 | 返回值类型 |
---|---|---|---|
JSON_EXTRACT(doc, path) | 提取JSON值 | '"name":"John"', '$.name' → 'John' | VARCHAR |
JSON_ARRAYAGG(expr) | 聚合生成数组 | group_concat(id) → [1,2,3] | JSON |
JSON_MERGE_PRESERVE('.') | 合并多个JSON文档 | ['"a":1', '"b":2'] → 'a':1, 'b':2 | JSON |
示例场景:日志分析系统中,使用JSON_TABLE将半结构化日志转为关系表。在API响应中,CONCAT_WS(',', JSON_OBJECT(...))动态生成嵌套JSON结构。需注意JSON路径表达式需以'$'开头,且键名大小写敏感。
八、窗口函数:分组内排名与分析
窗口函数(MySQL 8.0+)支持OVER子句,实现分组内计算而不解构数据。
函数名 | 功能描述 | 典型参数 | 返回值类型 |
---|---|---|---|
ROW_NUMBER() OVER (PARTITION BY col) | 分组内连续排名 | 按部门排序员工编号 | INT |
RANK() OVER (ORDER BY salary DESC) | 全局唯一排名 | 按工资降序排列员工 | INT |
NTILE(n) OVER (ORDER BY age) | 分组划分 | 将年龄分为4个区间 | INT |
示例场景:电商用户画像中,使用CUME_DIST()计算用户消费金额的累计分布。在排行榜功能中,DENSE_RANK()处理并列名次。窗口函数相比子查询性能更优,但需注意OVER子句的分区和排序规则对结果的影响。
MySQL函数体系通过分类明确的模块化设计,覆盖了从基础数据处理到高级分析的全场景需求。在实际使用中,需关注函数的版本兼容性(如JSON函数需5.7+)、性能开销(如加密函数计算成本)以及数据类型匹配(如日期函数参数需DATE类型)。建议通过EXPLAIN分析函数执行计划,避免在WHERE子句中对大字段使用复杂函数导致全表扫描。未来随着MySQL对AI函数(如向量相似度计算)的支持,其函数库将进一步扩展,为实时数据分析和机器学习提供更强大的原生能力。





