MySQL 常用函数用法速查(含解释与示例)

MySQL 常用函数用法速查(含解释与示例)

适用:MySQL 5.7/8.0 常见用法(不同版本/SQL Mode 可能略有差异)

说明:示例中使用 SELECT ... 演示,实际可用于查询、计算列、条件过滤、分组统计等。


目录

  • [1. 字符串函数](#1. 字符串函数)
  • [2. 数值函数](#2. 数值函数)
  • [3. 日期时间函数](#3. 日期时间函数)
  • [4. 聚合函数(分组统计)](#4. 聚合函数(分组统计))
  • [5. 条件与空值处理](#5. 条件与空值处理)
  • [6. 类型转换](#6. 类型转换)
  • [7. JSON 函数(MySQL 5.7+)](#7. JSON 函数(MySQL 5.7+))
  • [8. 窗口函数(MySQL 8.0+)](#8. 窗口函数(MySQL 8.0+))
  • [9. 加密与编码](#9. 加密与编码)
  • [10. 其它常用函数](#10. 其它常用函数)
  • [11. 小贴士:性能与注意事项](#11. 小贴士:性能与注意事项)

1. 字符串函数

1.1 CONCAT / CONCAT_WS

  • 作用:拼接字符串
  • 语法
    • CONCAT(s1, s2, ...)
    • CONCAT_WS(sep, s1, s2, ...)(带分隔符,忽略 NULL)
  • 示例
sql 复制代码
SELECT CONCAT('a', '-', 'b');              -- 'a-b'
SELECT CONCAT_WS(',', 'a', NULL, 'b');     -- 'a,b'

1.2 LENGTH / CHAR_LENGTH

  • 作用
    • LENGTH(s):字节长度(受字符集影响)
    • CHAR_LENGTH(s):字符长度
sql 复制代码
SELECT LENGTH('你好'), CHAR_LENGTH('你好');

1.3 SUBSTRING / LEFT / RIGHT

  • 作用:截取字符串
  • 语法
    • SUBSTRING(s, pos, len)(pos 从 1 开始,可为负)
    • LEFT(s, len)RIGHT(s, len)
sql 复制代码
SELECT SUBSTRING('abcdef', 2, 3);  -- 'bcd'
SELECT LEFT('abcdef', 2);         -- 'ab'
SELECT RIGHT('abcdef', 2);        -- 'ef'

1.4 REPLACE

  • 作用:替换子串
sql 复制代码
SELECT REPLACE('a-b-c', '-', '_'); -- 'a_b_c'

1.5 TRIM / LTRIM / RTRIM

  • 作用:去空格(或指定字符)
sql 复制代码
SELECT TRIM('  hi  ');                 -- 'hi'
SELECT TRIM(BOTH '-' FROM '--hi--');   -- 'hi'

1.6 UPPER / LOWER

  • 作用:大小写转换
sql 复制代码
SELECT UPPER('Abc'), LOWER('Abc'); -- 'ABC', 'abc'

1.7 INSTR / LOCATE

  • 作用:查找子串位置(找不到返回 0)
  • 区别LOCATE(substr, str, pos) 支持起始位置
sql 复制代码
SELECT INSTR('hello', 'll');           -- 3
SELECT LOCATE('l', 'hello', 4);        -- 4

1.8 LPAD / RPAD

  • 作用:左/右填充到指定长度
sql 复制代码
SELECT LPAD('7', 3, '0');  -- '007'
SELECT RPAD('a', 5, '.');  -- 'a....'

2. 数值函数

2.1 ROUND / CEIL / FLOOR

  • 作用
    • ROUND(x, d):四舍五入到 d 位
    • CEIL(x):向上取整
    • FLOOR(x):向下取整
sql 复制代码
SELECT ROUND(3.14159, 2);  -- 3.14
SELECT CEIL(1.2), FLOOR(1.8); -- 2, 1

2.2 ABS / SIGN

  • 作用
    • ABS(x):绝对值
    • SIGN(x):符号(-1/0/1)
sql 复制代码
SELECT ABS(-10), SIGN(-10), SIGN(0), SIGN(5);

2.3 MOD

  • 作用:取余
sql 复制代码
SELECT MOD(10, 3); -- 1

2.4 RAND

  • 作用:随机数(0~1)
sql 复制代码
SELECT RAND();

3. 日期时间函数

3.1 NOW / CURDATE / CURTIME

  • 作用
    • NOW():当前日期时间
    • CURDATE():当前日期
    • CURTIME():当前时间
sql 复制代码
SELECT NOW(), CURDATE(), CURTIME();

3.2 DATE / TIME / YEAR / MONTH / DAY

  • 作用:提取日期时间部件
sql 复制代码
SELECT DATE(NOW()), TIME(NOW()), YEAR(NOW()), MONTH(NOW()), DAY(NOW());

3.3 DATE_FORMAT

  • 作用:日期格式化为字符串
sql 复制代码
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');

3.4 STR_TO_DATE

  • 作用:字符串转日期
sql 复制代码
SELECT STR_TO_DATE('2026-01-20 13:14:15', '%Y-%m-%d %H:%i:%s');

3.5 DATE_ADD / DATE_SUB

  • 作用:日期加减
sql 复制代码
SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY);
SELECT DATE_SUB(CURDATE(), INTERVAL 1 MONTH);

3.6 TIMESTAMPDIFF

  • 作用:计算差值(单位可选)
sql 复制代码
SELECT TIMESTAMPDIFF(DAY, '2026-01-01', '2026-01-20'); -- 19

3.7 DATEDIFF

  • 作用:两个日期相差天数(date1 - date2)
sql 复制代码
SELECT DATEDIFF('2026-01-20', '2026-01-01'); -- 19

4. 聚合函数(分组统计)

常与 GROUP BY 配合。

注意:COUNT(*) 统计行数;COUNT(col) 不统计 NULL。

4.1 COUNT / SUM / AVG / MIN / MAX

sql 复制代码
SELECT
  COUNT(*)           AS cnt,
  COUNT(score)       AS cnt_score,
  SUM(score)         AS sum_score,
  AVG(score)         AS avg_score,
  MIN(score)         AS min_score,
  MAX(score)         AS max_score
FROM t;

4.2 GROUP_CONCAT

  • 作用:把分组后的多行拼成一个字符串
  • 常用参数DISTINCTORDER BYSEPARATOR
sql 复制代码
SELECT dept_id, GROUP_CONCAT(name ORDER BY name SEPARATOR ',') AS names
FROM employee
GROUP BY dept_id;

5. 条件与空值处理

5.1 IF

  • 作用:简单条件表达式
  • 语法IF(cond, v_true, v_false)
sql 复制代码
SELECT IF(1=1, 'yes', 'no'); -- 'yes'

5.2 CASE WHEN

  • 作用:多分支条件
sql 复制代码
SELECT
  CASE
    WHEN score >= 90 THEN 'A'
    WHEN score >= 80 THEN 'B'
    ELSE 'C'
  END AS grade
FROM t;

5.3 COALESCE / IFNULL / NULLIF

  • 作用
    • COALESCE(a,b,c):返回第一个非 NULL
    • IFNULL(a,b):a 为 NULL 则返回 b
    • NULLIF(a,b):a=b 返回 NULL,否则返回 a
sql 复制代码
SELECT COALESCE(NULL, NULL, 'x');   -- 'x'
SELECT IFNULL(NULL, 'x');          -- 'x'
SELECT NULLIF(10, 10), NULLIF(10, 9); -- NULL, 10

6. 类型转换

6.1 CAST / CONVERT

  • 作用:显式类型转换(更可控)
sql 复制代码
SELECT CAST('123' AS UNSIGNED);    -- 123
SELECT CAST(123.45 AS DECIMAL(10,2)); -- 123.45
SELECT CONVERT('2026-01-20' , DATE);

7. JSON 函数(MySQL 5.7+)

JSON 列类型、JSON 路径:$.a.b[0]

7.1 JSON_EXTRACT(别名 ->)

  • 作用:提取 JSON 字段
sql 复制代码
SELECT JSON_EXTRACT('{"a": {"b": 1}}', '$.a.b');  -- 1
SELECT '{"a": {"b": 1}}' -> '$.a.b';             -- 1

7.2 JSON_UNQUOTE(别名 ->>)

  • 作用:提取并去掉引号(返回纯字符串)
sql 复制代码
SELECT JSON_UNQUOTE('"hello"');         -- hello
SELECT '{"a":"x"}' ->> '$.a';           -- x

7.3 JSON_SET / JSON_REPLACE / JSON_REMOVE

sql 复制代码
SELECT JSON_SET('{"a":1}', '$.b', 2);           -- {"a":1,"b":2}
SELECT JSON_REPLACE('{"a":1}', '$.a', 9);       -- {"a":9}
SELECT JSON_REMOVE('{"a":1,"b":2}', '$.b');     -- {"a":1}

8. 窗口函数(MySQL 8.0+)

用于"分组内排序/排名/累计",不需要把结果再聚合成一行。

8.1 ROW_NUMBER / RANK / DENSE_RANK

sql 复制代码
SELECT
  user_id,
  score,
  ROW_NUMBER() OVER (PARTITION BY class_id ORDER BY score DESC) AS rn,
  RANK()       OVER (PARTITION BY class_id ORDER BY score DESC) AS rnk,
  DENSE_RANK() OVER (PARTITION BY class_id ORDER BY score DESC) AS drnk
FROM t;

8.2 SUM/AVG 作为窗口聚合(累计)

sql 复制代码
SELECT
  dt,
  amount,
  SUM(amount) OVER (ORDER BY dt) AS running_sum
FROM t;

9. 加密与编码

9.1 MD5 / SHA2

  • 作用:生成哈希(不可逆,常用于校验/指纹;密码建议在应用层使用更安全的方案,如 bcrypt/argon2)
sql 复制代码
SELECT MD5('abc');
SELECT SHA2('abc', 256);

9.2 TO_BASE64 / FROM_BASE64

sql 复制代码
SELECT TO_BASE64('hello');
SELECT FROM_BASE64(TO_BASE64('hello'));

10. 其它常用函数

10.1 UUID

  • 作用:生成 UUID 字符串
sql 复制代码
SELECT UUID();

10.2 GREATEST / LEAST

  • 作用:多值比较取最大/最小
sql 复制代码
SELECT GREATEST(1, 5, 3), LEAST(1, 5, 3); -- 5, 1

10.3 DISTINCT 与函数

  • 作用:对聚合输入去重
sql 复制代码
SELECT COUNT(DISTINCT user_id) FROM t;

11. 小贴士:性能与注意事项

  1. 函数包列会影响索引

    例如:WHERE DATE(create_time) = '2026-01-20' 往往无法用上 create_time 索引。

    推荐写法:

    sql 复制代码
    WHERE create_time >= '2026-01-20'
      AND create_time <  '2026-01-21'
  2. NULL 的传播

    很多函数遇到 NULL 会返回 NULL(如 CONCAT 在 MySQL 中:只要有 NULL 则结果为 NULL;可用 CONCAT_WSIFNULL 处理)。

  3. 分页排序稳定性
    LIMIT 分页务必配合稳定的 ORDER BY,否则同一页可能每次返回不同顺序。


最后更新:2026-01-20

相关推荐
liux35282 小时前
MySQL高可用架构全面解析:MHA原理、部署与运维实践(九)
mysql·高可用
信创天地2 小时前
国产关系型数据库部署与权限管理实战:人大金仓、达梦、南大通用、华为GaussDB
数据库·华为·gaussdb
l1t2 小时前
psql 中的流水线操作(PostgreSQL 18)
数据库·人工智能·postgresql
enfpZZ小狗2 小时前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
Geek攻城猫2 小时前
深入理解 SQL 多字段排序:从基础到高级技巧
数据库·sql
洛_尘2 小时前
MySQL 7:数据库设计
数据库·mysql
heze092 小时前
sqli-labs-Less-22
数据库·mysql·网络安全
墨雨晨曦883 小时前
如何保证redis和mysql数据一致性方案对比
数据库·redis·mysql
rfidunion3 小时前
springboot+VUE+部署(9。安装MySql)
spring boot·后端·mysql