MySQL 函数的详细分类说明及用法示例

套图传送门

以下是 MySQL 函数的详细分类说明及用法示例,涵盖常见函数及核心场景。由于函数数量庞大,本文重点介绍 高频函数,完整列表请参考 MySQL 官方文档


一、字符串函数

1. CONCAT(str1, str2, ...)

  • 功能: 拼接多个字符串。
  • 示例:sql复制SELECT CONCAT(‘Hello’, ‘ ‘, ‘World’); — 输出 ‘Hello World’ SELECT CONCAT(first_name, ‘ ‘, last_name) AS full_name FROM users;
  • 注意: 若任一参数为 NULL,结果返回 NULL。用 CONCAT_WS() 处理含分隔符的拼接。

2. SUBSTRING(str, start, length)

  • 功能: 截取子字符串。
  • 示例:sql复制SELECT SUBSTRING(‘MySQL’, 3, 2); — 输出 ‘SQ’ SELECT SUBSTRING(‘2023-10-25’, 1, 4); — 输出 ‘2023’
  • 简写SUBSTR() 是别名。

3. REPLACE(str, from_str, to_str)

  • 功能: 替换字符串中的内容。
  • 示例:sql复制SELECT REPLACE(‘I like apples’, ‘apples’, ‘oranges’); — 输出 ‘I like oranges’

4. LENGTH(str) 与 CHAR_LENGTH(str)

  • 区别:
    • LENGTH(): 返回字节数(受字符集影响)。
    • CHAR_LENGTH(): 返回字符数。
  • 示例:sql复制SELECT LENGTH(‘中国’); — UTF-8 下输出 6(每个汉字占3字节) SELECT CHAR_LENGTH(‘中国’); — 输出 2

二、数值函数

1. ROUND(number, decimals)

  • 功能: 四舍五入到指定小数位。
  • 示例:sql复制SELECT ROUND(3.1415, 2); — 输出 3.14 SELECT ROUND(123.456, -1); — 输出 120(十位四舍五入)

2. CEIL() 与 FLOOR()

  • 功能:
    • CEIL(): 向上取整。
    • FLOOR(): 向下取整。
  • 示例:sql复制SELECT CEIL(2.3); — 输出 3 SELECT FLOOR(2.7); — 输出 2

3. RAND()

  • 功能: 生成 0~1 之间的随机数。
  • 示例:sql复制SELECT RAND(); — 输出类似 0.654321 SELECT FLOOR(RAND() * 100); — 生成 0~99 的随机整数

三、日期时间函数

1. NOW() 与 CURDATE()

  • 区别:
    • NOW(): 返回当前日期和时间(如 2023-10-25 14:30:00)。
    • CURDATE(): 仅返回当前日期(如 2023-10-25)。
  • 示例:sql复制SELECT NOW(); — 获取当前时间戳 SELECT CURDATE(); — 获取当前日期

2. DATE_ADD(date, INTERVAL expr unit)

  • 功能: 日期加法。
  • 示例:sql复制SELECT DATE_ADD(NOW(), INTERVAL 7 DAY); — 7天后的时间 SELECT DATE_ADD(‘2023-12-31’, INTERVAL 1 MONTH); — 输出 ‘2024-01-31’

3. DATEDIFF(date1, date2)

  • 功能: 计算两个日期之间的天数差。
  • 示例:sql复制SELECT DATEDIFF(‘2023-10-31’, ‘2023-10-25’); — 输出 6

4. DATE_FORMAT(date, format)

  • 功能: 格式化日期。
  • 常用格式符:
    • %Y: 四位年份(如 2023)
    • %m: 两位月份(01~12)
    • %d: 两位日期(01~31)
    • %H: 24小时制小时(00~23)
  • 示例:sql复制SELECT DATE_FORMAT(NOW(), ‘%Y-%m-%d %H:%i:%s’); — 输出 ‘2023-10-25 14:30:00’

四、聚合函数

1. SUM(column)

  • 功能: 计算数值列的总和。
  • 示例:sql复制SELECT SUM(sales) FROM orders WHERE year = 2023;

2. COUNT(expression)

  • 功能: 统计行数。
  • 区别:
    • COUNT(*): 统计所有行(包括 NULL)。
    • COUNT(column): 忽略该列的 NULL 值。
  • 示例:sql复制SELECT COUNT(*) FROM users; — 总用户数 SELECT COUNT(DISTINCT country) FROM customers; — 去重统计国家数

3. GROUP_CONCAT(expr)

  • 功能: 合并分组中的字符串。
  • 示例:sql复制SELECT department_id, GROUP_CONCAT(name) FROM employees GROUP BY department_id; — 输出每个部门的员工姓名列表

五、条件函数

1. IF(condition, value_if_true, value_if_false)

  • 功能: 简单条件判断。
  • 示例:sql复制SELECT IF(score >= 60, ‘Pass’, ‘Fail’) AS result FROM exams;

2. CASE WHEN

  • 功能: 多条件分支。
  • 示例:sql复制SELECT CASE WHEN age < 18 THEN ‘Minor’ WHEN age BETWEEN 18 AND 65 THEN ‘Adult’ ELSE ‘Senior’ END AS age_group FROM users;

3. COALESCE(value1, value2, ...)

  • 功能: 返回第一个非 NULL 值。
  • 示例:sql复制SELECT COALESCE(middle_name, ‘N/A’) FROM users; — 若 middle_name 为 NULL,显示 ‘N/A’

六、窗口函数(MySQL 8.0+)

1. ROW_NUMBER()

  • 功能: 为分组内的行生成序号。
  • 示例:sql复制SELECT name, salary, ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rank FROM employees; — 按部门分组,按工资降序排名

2. RANK() 与 DENSE_RANK()

  • 区别:
    • RANK(): 允许并列排名,后续序号跳跃(如 1,1,3)。
    • DENSE_RANK(): 允许并列排名,后续序号连续(如 1,1,2)。

七、JSON 函数(MySQL 5.7+)

1. JSON_EXTRACT(json_doc, path)

  • 功能: 提取 JSON 字段。
  • 简写语法->
  • 示例:sql复制SELECT JSON_EXTRACT(‘{“name”: “John”, “age”: 30}’, ‘$.name’); — 输出 “John” SELECT data->’$.age’ FROM users; — 等效写法

2. JSON_ARRAYAGG(expr)

  • 功能: 将多行数据聚合为 JSON 数组。
  • 示例:sql复制SELECT department_id, JSON_ARRAYAGG(name) FROM employees GROUP BY department_id;

八、加密函数

1. MD5(str)

  • 功能: 计算 MD5 哈希值(不推荐用于密码存储)。
  • 示例:sql复制SELECT MD5(‘password’); — 输出 32位哈希字符串

2. SHA2(str, hash_length)

  • 功能: 计算 SHA-2 哈希值(更安全)。
  • 示例:sql复制SELECT SHA2(‘password’, 256); — 输出 SHA-256 哈希值

注意事项

  1. 性能优化:
    • 避免在 WHERE 或 JOIN 条件中对字段使用函数(可能导致索引失效)。
    • 示例错误写法: SELECT * FROM logs WHERE DATE_FORMAT(create_time, '%Y-%m') = '2023-10'
    • 正确优化: SELECT * FROM logs WHERE create_time BETWEEN '2023-10-01' AND '2023-10-31'
  2. 版本兼容性:
    • 窗口函数、JSON 函数需 MySQL 8.0+ 或 5.7+ 支持。
  3. NULL 处理:
    • 大多数函数遇到 NULL 参数会返回 NULL,使用 IFNULL() 或 COALESCE() 处理默认值。
套图传送门
THE END
喜欢就支持一下吧
点赞35 分享