MySQL中常用函数的分类及示例

概述

以下是 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 值的处理(如 COALESCEIFNULL)。

• 窗口函数需 MySQL 8.0+ 支持,低版本可改用自连接或子查询实现类似功能。

相关推荐
丶意冷21 分钟前
mybatisPlus分页方言设置错误问题 mybatisPlus对于Oceanbase的Oracle租户分页识别错误
java·数据库·oracle·oceanbase
时序数据说2 小时前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
戒不掉的伤怀2 小时前
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
服务器·数据库·mysql
cv高级工程师YKY2 小时前
服务器 - - QPS与TPS介绍
数据库
nbsaas-boot2 小时前
高可扩展属性建模设计:架构师的全局思考与落地方案
数据库
爱上语文3 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
陈敬雷-充电了么-CEO兼CTO3 小时前
推荐算法系统系列>推荐数据仓库集市的ETL数据处理
大数据·数据库·数据仓库·数据挖掘·数据分析·etl·推荐算法
MeshddY4 小时前
(超详细)数据库项目初体验:使用C语言连接数据库完成短地址服务(本地运行版)
c语言·数据库·单片机
wuxinyan1234 小时前
Java面试题033:一文深入了解MySQL(5)
java·数据库·mysql·面试
笑衬人心。4 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu