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

2次阅读

最常用、最值得优先掌握的是字符串函数、日期时间函数、数学函数、控制流程函数这四类,覆盖90%以上日常sql数据加工需求;它们分别支撑文本处理、时间运算、数值计算与逻辑判断。

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

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

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

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

  • 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 下怎么表现、在不同字符集/版本下是否一致。尤其是字符串长度、日期格式符、四舍五入规则这些细节,线上出问题时往往就卡在这几步。

text=ZqhQzanResources