mysql函数大全及举例
一、数学函数
主要用于数值计算。
函数名 | 功能描述 | 示例 |
---|---|---|
ABS(x) | 返回 x 的绝对值 | SELECT ABS(-1); -- 返回 1 |
CEIL(x) / CEILING(x) | 返回大于或等于 x 的最小整数(向上取整) | SELECT CEIL(1.23); -- 返回 2 |
FLOOR(x) | 返回小于或等于 x 的最大整数(向下取整) | SELECT FLOOR(1.99); -- 返回 1 |
ROUND(x, d) | 将 x 四舍五入,保留 d 位小数 | SELECT ROUND(1.23456, 2); -- 返回 1.23 |
TRUNCATE(x, d) | 将 x 截断为 d 位小数(不四舍五入) | SELECT TRUNCATE(1.239, 2); -- 返回 1.23 |
RAND() | 返回 0 到 1 之间的随机浮点数 | SELECT RAND(); -- 返回 0.123456... |
POW(x, y) / POWER(x, y) | 返回 x 的 y 次方 | SELECT POW(2, 3); -- 返回 8 |
SQRT(x) | 返回 x 的平方根 | SELECT SQRT(9); -- 返回 3 |
MOD(x, y) | 返回 x 除以 y 的余数(取模) | SELECT MOD(10, 3); -- 返回 1 |
二、字符串函数
用于处理文本字符串。
函数名 | 功能描述 | 示例 |
---|---|---|
CONCAT(s1, s2, ...) | 连接多个字符串 | SELECT CONCAT('Hello', ' ', 'World'); -- 'Hello World' |
CONCAT_WS(sep, s1, s2, ...) | 用指定分隔符连接字符串 | SELECT CONCAT_WS(', ', 'Apple', 'Banana'); -- 'Apple, Banana' |
LENGTH(s) / CHAR_LENGTH(s) | 返回字符串 s 的字符数 | SELECT LENGTH('中国'); -- 返回 2 (CHAR_LENGTH) |
CHAR_LENGTH(s) | 返回字符串 s 的字符数 | SELECT CHAR_LENGTH('中国'); -- 返回 2 |
UPPER(s) / LOWER(s) | 将字符串转换为大写/小写 | SELECT UPPER('hello'); -- 'HELLO' |
LEFT(s, n) / RIGHT(s, n) | 返回字符串 s 左边/右边开始的 n 个字符 | SELECT LEFT('MySQL', 2); -- 'My' |
SUBSTRING(s, start, len) | 从字符串 s 的 start 位置截取 len 个字符 | SELECT SUBSTRING('Hello World', 7, 5); -- 'World' |
REPLACE(s, from_str, to_str) | 将字符串 s 中的 from_str 替换为 to_str | SELECT REPLACE('Hello World', 'World', 'MySQL'); -- 'Hello MySQL' |
TRIM(s) | 去掉字符串 s 开头和结尾的空格 | SELECT TRIM(' text '); -- 'text' |
LTRIM(s) / RTRIM(s) | 去掉字符串 s 开头/结尾的空格 | SELECT LTRIM(' text'); -- 'text' |
REVERSE(s) | 反转字符串 | SELECT REVERSE('ABC'); -- 'CBA' |
INSTR(s, substr) | 返回子串 substr 在字符串 s 中第一次出现的位置 | SELECT INSTR('Hello', 'e'); -- 返回 2 |
三、日期和时间函数
用于处理日期和时间值。
函数名 | 功能描述 | 示例 |
---|---|---|
NOW() / CURDATE() / CURTIME() | 返回当前日期和时间 / 当前日期 / 当前时间 | SELECT NOW(); -- '2023-10-27 10:30:00' |
DATE(date) / TIME(date) | 提取日期/时间部分 | SELECT DATE(NOW()); -- '2023-10-27' |
YEAR(date) / MONTH(date) / DAY(date) | 从日期中提取年/月/日 | SELECT YEAR('2023-10-27'); -- 2023 |
HOUR(time) / MINUTE(time) / SECOND(time) | 从时间中提取时/分/秒 | SELECT HOUR('10:30:15'); -- 10 |
DATE_FORMAT(date, format) | 按格式格式化日期 | SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日'); -- '2023年10月27日' |
DATEDIFF(date1, date2) | 计算两个日期之差 (date1 - date2),单位天 | SELECT DATEDIFF('2023-12-31', '2023-10-27'); -- 65 |
DATE_ADD(date, INTERVAL expr unit) | 日期加法 | SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); -- 明天此时 |
DATE_SUB(date, INTERVAL expr unit) | 日期减法 | SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH); -- 一月前此时 |
DAYNAME(date) | 返回日期是星期几 | SELECT DAYNAME('2023-10-27'); -- 'Friday' |
四、聚合函数
对一组值执行计算,并返回单个值。通常与 GROUP BY
子句一起使用。
函数名 | 功能描述 | 示例 |
---|---|---|
COUNT(expr) | 返回记录的行数 | SELECT COUNT(*) FROM users; |
SUM(expr) | 返回表达式 expr 的总和 | SELECT SUM(salary) FROM employees; |
AVG(expr) | 返回表达式 expr 的平均值 | SELECT AVG(age) FROM students; |
MAX(expr) | 返回表达式 expr 的最大值 | SELECT MAX(price) FROM products; |
MIN(expr) | 返回表达式 expr 的最小值 | SELECT MIN(score) FROM exams; |
GROUP_CONCAT(expr) | 将一组行的表达式连接成一个字符串 | SELECT GROUP_CONCAT(name) FROM users GROUP BY dept_id; |
五、控制流函数
用于实现条件逻辑。
函数名 | 功能描述 | 示例 |
---|---|---|
IF(condition, value_if_true, value_if_false) | 如果条件为真,返回第一个值,否则返回第二个值 | SELECT IF(10>5, 'Yes', 'No'); -- 'Yes' |
IFNULL(expr1, expr2) | 如果 expr1 不为 NULL,返回 expr1,否则返回 expr2 | SELECT IFNULL(NULL, 'Default'); -- 'Default' |
CASE WHEN ... THEN ... END | 多条件分支语句 | 见下方详细示例 |
CASE 语句示例:
SELECTname,score,CASEWHEN score >= 90 THEN 'A'WHEN score >= 80 THEN 'B'WHEN score >= 70 THEN 'C'ELSE 'D'END AS grade FROM exams;
六、系统信息函数
返回关于数据库和系统的信息。
函数名 | 功能描述 | 示例 |
---|---|---|
VERSION() | 返回 MySQL 服务器版本 | SELECT VERSION(); |
DATABASE() | 返回当前数据库名 | SELECT DATABASE(); |
USER() | 返回当前用户名和主机名 | SELECT USER(); |
CONNECTION_ID() | 返回当前连接的连接 ID | SELECT CONNECTION_ID(); |
LAST_INSERT_ID() | 返回最后插入的 AUTO_INCREMENT 列的值 | SELECT LAST_INSERT_ID(); |
七、类型转换函数
用于转换数据类型。
函数名 | 功能描述 | 示例 |
---|---|---|
CAST(expr AS type) | 将表达式转换为指定类型 | SELECT CAST('123' AS UNSIGNED); -- 123 |
CONVERT(expr, type) | 将表达式转换为指定类型 | SELECT CONVERT('2023-10-27', DATE); -- 2023-10-27 |
类型可以是: BINARY
, CHAR
, DATE
, DATETIME
, TIME
, SIGNED
, UNSIGNED
, DECIMAL
等。
八、JSON 函数 (MySQL 5.7+)
用于操作 JSON 数据类型。
函数名 | 功能描述 | 示例 |
---|---|---|
JSON_EXTRACT(json_doc, path) / -> | 从 JSON 文档中提取值 | SELECT JSON_EXTRACT('{"name": "John"}', '$.name'); -- "John" |
JSON_OBJECT(key, val, ...) | 创建 JSON 对象 | SELECT JSON_OBJECT('id', 1, 'name', 'Alice'); |
JSON_ARRAY(val1, val2, ...) | 创建 JSON 数组 | SELECT JSON_ARRAY(1, 2, 3); |
JSON_SEARCH(json_doc, one/all, search_str) | 在 JSON 文档中查找值并返回路径 | SELECT JSON_SEARCH('{"name": "John"}', 'one', 'John'); -- "$.name" |
综合应用示例
假设有一个 orders
表 (order_id
, customer_name
, order_date
, amount
)。
-- 1. 查询本月订单总额和平均金额 SELECTSUM(amount) AS total_amount,AVG(amount) AS avg_amount FROM orders WHERE YEAR(order_date) = YEAR(NOW()) AND MONTH(order_date) = MONTH(NOW());-- 2. 格式化客户名称(首字母大写)和订单日期 SELECTCONCAT(UPPER(LEFT(customer_name, 1)), LOWER(SUBSTRING(customer_name, 2))) AS formatted_name,DATE_FORMAT(order_date, '%W, %M %e, %Y') AS formatted_date FROM orders;-- 3. 使用 CASE 对订单金额进行分类 SELECTorder_id,amount,CASEWHEN amount > 1000 THEN 'Large'WHEN amount > 500 THEN 'Medium'ELSE 'Small'END AS order_size FROM orders;