mysql内置函数有哪些常用类型_mysql函数分类说明

来源:这里教程网 时间:2026-02-28 20:47:55 作者:
MySQL 内置函数不是“一堆零散工具”,而是按数据处理场景组织的几类核心能力模块。直接说结论:**最常用、最值得优先掌握的是字符串函数、日期时间函数、数学函数、控制流程函数这四类**,覆盖了 90% 以上的日常 SQL 数据加工需求。

字符串函数:文本拼接、清洗、提取的主力

这是你写

SELECT
UPDATE
时调用频率最高的函数类别,尤其在报表生成、字段标准化、日志解析中几乎必用。

CONCAT()
CONCAT_WS()
:前者简单拼接(
CONCAT('a','b')
'ab'
),后者带分隔符更安全(
CONCAT_WS('-', '2025', '12', '31')
'2025-12-31'
);注意任一参数为
NULL
时,
CONCAT()
整体返回
NULL
,而
CONCAT_WS()
会跳过
NULL
参数
TRIM()
/
LPAD()
/
RPAD()
:清理空格或补位很常见,比如工号补零:
LPAD(workno, 5, '0')
—— 但要注意,如果原始值是字符串(如
'A1'
),补的是字符,不是数值对齐;若字段是数字类型,先转成字符串再补
SUBSTRING()
LEFT()
/
RIGHT()
:截取位置从 1 开始(不是 0),这是新手最容易写错的地方;
SUBSTRING('abcde', 2, 3)
返回
'bcd'
,不是
'cde'
REPLACE()
是全局替换,不支持正则;想做模式替换得用
REGEXP_REPLACE()
(MySQL 8.0.4+ 才有),低版本只能靠应用层或多次
REPLACE()

日期时间函数:处理“时间”不能只靠 NOW()

业务中大量涉及“最近7天”“入职满1年”“按月汇总”,光用

NOW()
远不够,关键在能加减、能格式化、能比大小。

DATE_ADD()
DATE_SUB()
是时间运算基础,单位必须明确:
DATE_ADD(NOW(), INTERVAL 3 MONTH)
合法,
DATE_ADD(NOW(), INTERVAL 30 DAY)
也合法,但别写成
INTERVAL 30
(缺单位会报错)
DATEDIFF()
只返回天数差(整数),且只认日期部分(自动忽略时分秒);要算精确到秒的差,用
TIMESTAMPDIFF(SECOND, t1, t2)
DATE_FORMAT()
格式符大小写敏感:
%Y
是 4 位年,
%y
是 2 位;
%m
是月份数字(01–12),
%M
是英文月份名(January);错误写成
%MM
或漏掉
%
会导致原样输出
所有日期函数输入值必须是合法日期类型(
DATE
/
DATETIME
/
TIMESTAMP
),传入字符串如
'20251231'
可能被隐式转换失败,建议显式用
STR_TO_DATE('20251231', '%Y%m%d')

数学与控制流程函数:让 SQL 具备“逻辑判断”能力

这类函数把 SQL 从“查数据”升级为“算逻辑”,避免在应用层做 if-else 拆分查询。

IF()
最轻量:
IF(score >= 60, '及格', '不及格')
;但嵌套深了可读性差,复杂分支建议用
CASE WHEN
IFNULL()
COALESCE()
都用于空值兜底,区别在于:
IFNULL(a,b)
只接受两个参数,
COALESCE(a,b,c)
支持多参数并返回第一个非 NULL 值;
COALESCE
是 SQL 标准,跨数据库兼容性更好
ROUND(x, d)
四舍五入,注意 MySQL 的
ROUND()
对 .5 的处理是“向偶数舍入”(banker’s rounding),比如
ROUND(2.5, 0)
= 2,
ROUND(3.5, 0)
= 4 —— 和多数编程语言默认行为不同,财务场景需特别验证
RAND()
每行返回不同随机数,不能用于固定种子场景;如需可重现的随机序列,得靠应用层生成后传入

别忽略 CHAR_LENGTH() 和 LENGTH() 的本质差异

这个点看似小,却在中文、emoji 场景下频繁引发 bug:一个汉字在 utf8mb4 下占 4 字节,但只是 1 个字符。

CHAR_LENGTH('数据库')
返回
3
(字符数)
LENGTH('数据库')
返回
12
(字节数,utf8mb4 编码下)
做字段长度校验、截断、填充时,务必确认业务语义是“几个字”还是“占多少空间”;比如限制昵称最多 10 个汉字,该用
CHAR_LENGTH()
,而不是
LENGTH()
索引前缀长度限制(如
VARCHAR(255)
加前缀索引
INDEX(col(10))
)中的
10
指的是字符数(MySQL 5.7+),和
CHAR_LENGTH()
对齐
真正用好 MySQL 函数,不是背列表,而是清楚每个函数的边界:它接受什么输入、拒绝什么输入、在 NULL 下怎么表现、在不同字符集/版本下是否一致。尤其是字符串长度、日期格式符、四舍五入规则这些细节,线上出问题时往往就卡在这几步。

相关推荐