MySQL - 函数
【MySQL 笔记】内置函数Built-in Functions详解MySQL 提供了非常丰富且实用的内置函数按照使用频率和重要性排序如下一、MySQL 8.x 最常用函数分类速查2026 年视角分类星级使用频率代表性函数高频 → 低频典型使用场景字符串处理★★★★★CONCAT / CONCAT_WS / SUBSTRING / LEFT / RIGHT / TRIM / REPLACE / LOWER / UPPER / LENGTH / CHAR_LENGTH拼接姓名、处理手机号、清洗数据、提取子串日期时间★★★★★NOW() / CURDATE() / CURTIME() / DATE_FORMAT / DATE_ADD / DATE_SUB / DATEDIFF / UNIX_TIMESTAMP / FROM_UNIXTIME报表按天/月分组、计算年龄、倒计时、时间戳转换条件判断★★★★☆IF / IFNULL / NULLIF / CASE WHEN … THEN … ELSE … END性别转换、状态中文解释、空值友好显示聚合函数★★★★★COUNT / SUM / AVG / MAX / MIN / GROUP_CONCAT统计、求和、平均、极值、字符串聚合数值处理★★★★ROUND / CEIL / FLOOR / TRUNCATE / ABS / RAND / MOD四舍五入、随机排序、百分比计算类型转换★★★☆CAST / CONVERT / BINARY字符串转数字、日期转字符串JSON 函数★★★★☆- / - / JSON_EXTRACT / JSON_UNQUOTE / JSON_ARRAY / JSON_OBJECT / JSON_CONTAINS前后端分离项目、配置表、扩展字段窗口函数★★★★ROW_NUMBER() / RANK() / DENSE_RANK() / NTILE / LAG / LEAD / FIRST_VALUE / LAST_VALUE分组排名、同比环比、上下行对比加密/哈希★★★MD5 / SHA1 / SHA2 / PASSWORD / AES_ENCRYPT / AES_DECRYPT密码存储、数据签名注意MD5/SHA1已不安全系统信息★★★DATABASE() / USER() / CURRENT_USER() / VERSION() / LAST_INSERT_ID() / CONNECTION_ID()日志记录、调试、权限判断二、Top 30 高频函数速记表建议背下来字符串类日常使用率最高函数 示例代码 结果示例CONCAT CONCAT(‘张’, ‘三’, ‘丰’) 张三丰CONCAT_WS CONCAT_WS(’ - ‘, ‘2026’, ‘03’, ‘18’) 2026 - 03 - 18SUBSTRING / SUBSTR SUBSTRING(‘abcdefgh’, 3, 4) cdefLEFT / RIGHT LEFT(‘MySQL8.4’, 5) MySQLTRIM / LTRIM / RTRIM TRIM(’ hello world ) hello worldREPLACE REPLACE(‘hello mysql’, ‘mysql’, ‘world’) hello worldLOWER / UPPER LOWER(‘HeLLo WoRLD’) hello worldLENGTH / CHAR_LENGTH LENGTH(‘中文abc’), CHAR_LENGTH(‘中文abc’) 7 / 5LOCATE / POSITION / INSTR LOCATE(‘sql’, ‘mysql is good’) 3日期时间类报表/日志必备函数 示例代码 结果示例NOW() / CURRENT_TIMESTAMP NOW() 2026-03-18 18:42:35.123CURDATE() / CURRENT_DATE CURDATE() 2026-03-18DATE_FORMAT DATE_FORMAT(NOW(), ‘%Y年%m月%d日 %H:%i’) 2026年03月18日 18:42DATEDIFF DATEDIFF(‘2026-04-01’, NOW()) 14DATE_ADD / DATE_SUB DATE_ADD(NOW(), INTERVAL 3 MONTH) 2026-06-18 18:42:35TIMESTAMPDIFF TIMESTAMPDIFF(DAY, ‘2025-01-01’, NOW()) ≈442FROM_UNIXTIME FROM_UNIXTIME(1742343755) 2026-03-18 18:42:35UNIX_TIMESTAMP UNIX_TIMESTAMP(NOW()) 1742343755条件 空值处理最常出现在 SELECT 列表函数 示例代码 结果示例IF IF(score 60, ‘及格’, ‘不及格’) 及格IFNULL IFNULL(phone, ‘暂无电话’) 暂无电话NULLIF NULLIF(status, 0) NULL如果 status0CASE WHEN CASE WHEN age 18 THEN ‘未成年’ … END 未成年 / 成年 / 老年三、最经典的组合写法面试 生产高频-- 1. 拼接姓名 格式化日期 友好显示SELECTCONCAT_WS( ,last_name,first_name)AS姓名,DATE_FORMAT(created_at,%Y-%m-%d)AS注册日期,IF(gender1,先生,女士)AS称呼FROMusers;-- 2. 空值处理 状态中文 分页SELECTorder_no,IFNULL(remark,无备注)AS备注,CASEstatusWHEN0THEN待支付WHEN1THEN已支付WHEN2THEN已发货ELSE未知状态ENDAS状态中文FROMordersWHEREcreated_at2026-01-01ORDERBYcreated_atDESCLIMIT20OFFSET0;-- 3. 按月统计 金额格式化 空值转 0SELECTDATE_FORMAT(created_at,%Y-%m)AS月份,COUNT(*)AS订单数,ROUND(COALESCE(SUM(amount),0),2)AS总金额,ROUND(AVG(amount),2)AS客单价FROMordersGROUPBY月份ORDERBY月份DESC;-- 4. JSON 字段常用写法现代项目必会SELECTorder_id,data-$.receiver.nameAS收货人,data-$.receiver.phoneAS手机号,JSON_UNQUOTE(data-$.items[0].name)AS首件商品FROMordersWHEREJSON_EXTRACT(data,$.status)pending;四、2026 年建议掌握优先级排序字符串CONCAT_WS / SUBSTRING / REPLACE / TRIM / CHAR_LENGTH日期DATE_FORMAT / DATE_ADD / DATE_SUB / DATEDIFF / NOW() / CURDATE()条件IF / IFNULL / CASE WHEN尤其是嵌套在 SELECT 里聚合GROUP_CONCAT分组内拼接神器JSON- / - / JSON_EXTRACT前后端分离时代标配窗口函数ROW_NUMBER() / LAG() / LEAD()分析型查询必备下一期预告建议MySQL 窗口函数Window Functions完整实战ROW_NUMBER / RANK / DENSE_RANK / NTILE / LAG / LEAD / FIRST_VALUE 等你目前项目里用得最多的 MySQL 函数是哪些有没有特别想深入的函数组合比如日期计算、JSON 处理、字符串清洗等欢迎留言我们可以针对性继续展开祝大家 SQL 写得越来越优雅✨