跳到主要内容
MySQL 内置函数实战:日期、字符串与数学运算 | 极客日志
SQL
MySQL 内置函数实战:日期、字符串与数学运算 MySQL 内置函数涵盖日期、字符串、数学及工具类功能。常用函数用法、实战案例及避坑要点,帮助开发者提升 SQL 效率。核心包括时间计算、文本处理、数值运算及加密空值处理等场景,附带代码示例与注意事项。
接口猎人 发布于 2026/3/27 更新于 2026/6/2 19 浏览
前言:
在 MySQL 开发中,内置函数是提升 SQL 效率和灵活性的核心工具。无论是日期计算、字符串处理,还是数学运算、数据加密,合理使用内置函数能大幅简化代码,避免重复逻辑。本文基于实战场景,全面拆解 MySQL 常用内置函数,涵盖日期、字符串、数学、其他工具类函数,附带详细案例和避坑要点。
一。日期函数:处理时间相关需求
日期函数是业务开发中最常用的函数类别,用于获取当前时间、日期加减、时间差计算等场景,解决时间相关的数据处理问题。
1.1 核心日期函数表
函数 描述 current_date()获取当前日期(格式:yyyy-mm-dd) current_time()获取当前时间(格式:hh:mm:ss) current_timestamp()获取当前时间戳(格式:yyyy-mm-dd hh:mm:ss) now()等同于 current_timestamp(),获取当前日期时间 date(datetime)提取日期时间中的日期部分 date_add(date, interval 数值 单位)日期/时间加法(单位:year/day/hour/minute/second) date_sub(date, interval 数值 单位)日期/时间减法(单位同上) datediff(date1, date2)计算 date1 - date2 的天数差(仅日期部分)
1.2 实战案例
1.2.1 基础时间获取
SELECT current_date ();
SELECT current_time ();
SELECT current_timestamp ();
SELECT now();
1.2.2 日期加减运算
SELECT DATE_ADD('2026-03-10' , INTERVAL 10 DAY );
SELECT DATE_SUB('2026-03-10' , INTERVAL 2 YEAR );
SELECT DATE_ADD('2026-03-10 14:30:00' , INTERVAL 30 MINUTE );
SELECT DATE_SUB('2026-03-10 14:30:00' , INTERVAL 1 HOUR );
1.2.3 日期差计算与时间提取
SELECT DATEDIFF('2024-05-20' ,'2024-01-01' );
CREATE TABLE msg (
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR (30 ) NOT NULL ,
sendtime DATETIME
);
INSERT INTO msg (content, sendtime) VALUES ('hello mysql' , NOW()), ('hello function' , NOW());
SELECT content, DATE (sendtime) AS send_date FROM msg;
SELECT * FROM msg WHERE DATE_ADD(sendtime, INTERVAL 2 MINUTE ) > NOW();
1.2.4 业务场景:查询近期数据
SELECT * FROM msg WHERE DATE_ADD(sendtime, INTERVAL 2 MINUTE ) > NOW();
CREATE TABLE user_birthday (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR (20 ) NOT NULL ,
birthday DATE
);
INSERT INTO user_birthday (name, birthday) VALUES ('张三' ,'2000-05-18' ), ('李四' ,'2000-06-01' ), ('王五' ,'2000-05-22' );
SELECT * FROM user_birthday WHERE DATEDIFF(birthday, CURRENT_DATE ()) BETWEEN 0 AND 3 ;
二。字符串函数:处理文本数据 字符串函数用于字符串的拼接、截取、替换、大小写转换等操作,解决文本格式处理、内容提取等需求。
2.1 核心字符串函数表 函数名称 描述 charset(str)返回字符串的字符集(如 utf8、gbk) concat(str1, str2, ...)拼接多个字符串 instr(str, substr)返回 substr 在 str 中首次出现的位置(无则返回 0) ucase(str) / upper(str)字符串转大写 lcase(str) / lower(str)字符串转小写 left(str, length)从 str 左侧截取 length 个字符 length(str)返回字符串长度(以字节为单位,受字符集影响) replace(str, search_str, replace_str)用 replace_str 替换 str 中的 search_str substring(str, pos [, length])从 str 的 pos 位置(1 开始)截取 length 个字符(length 可选,默认到末尾) ltrim(str) / rtrim(str) / trim(str)去除字符串左侧 / 右侧 / 两侧的空格 strcmp(str1, str2)逐字符比较 str1 和 str2(相等返回 0,str1 大返回 1,否则返回 -1)
2.2 实战案例
2.2.1 字符串拼接与格式处理
CREATE TABLE exam_result (
name VARCHAR (20 ) NOT NULL ,
chinese FLOAT ,
math FLOAT ,
english FLOAT
);
INSERT INTO exam_result VALUES ('张三' ,85 ,92 ,78 ), ('李四' ,90 ,88 ,95 );
SELECT CONCAT(name,'的语文' ,chinese,'分,数学' ,math,'分,英语' ,english,'分' ) AS 成绩详情 FROM exam_result;
2.2.2 字符串截取与替换
SELECT ename, SUBSTRING (ename, 2 , 2 ) FROM exam_result;
SELECT ename, REPLACE(ename,'S' ,'上海' ) FROM exam_result;
SELECT LEFT ('hello world' , 3 );
2.2.3 大小写转换与空格处理
SELECT UCASE('mysql' ), LOWER ('MYSQL' );
SELECT TRIM (' mysql ' );
SELECT LTRIM(' mysql ' );
2.2.4 字符串长度与位置查询
SELECT LENGTH('mysql' ), LENGTH('MySQL 函数' );
SELECT INSTR('10,A,B' , ',' );
SELECT (LENGTH('10,A,B' ) - LENGTH(REPLACE('10,A,B' , ',' , '' ))) AS cnt;
2.2.5 首字母小写格式化
CREATE TABLE emp (ename VARCHAR (20 ));
INSERT INTO emp VALUES ('SMITH' ),('SCOTT' ),('WARD' );
SELECT CONCAT(LOWER (SUBSTRING (ename, 1 , 1 )), SUBSTRING (ename, 2 )) AS format_name FROM emp;
三。数学函数:数值计算与处理 数学函数用于数值的运算、进制转换、取整、随机数生成等,解决数值处理相关需求。
3.1 核心数学函数表 函数 描述 abs(number)绝对值 bin(decimal)十进制数转二进制 hex(decimal)十进制数转十六进制 conv(number, from_base, to_base)进制转换(如二进制转十进制) ceiling(number)向上取整(大于等于该数的最小整数) floor(number)向下取整(小于等于该数的最大整数) format(number, decimals)格式化数值,保留 decimals 位小数(四舍五入) rand()生成随机浮点数(范围:[0.0, 1.0)) mod(number, denominator)取模(求余数,等同于 number % denominator)
3.2 实战案例
SELECT ABS (-100.5 ), ABS (200 );
SELECT CEILING (23.1 ), CEILING (23.9 );
SELECT FLOOR (23.1 ), FLOOR (23.9 );
SELECT FORMAT(123.456 , 2 ), FORMAT(78.9 , 2 );
SELECT BIN(10 ), HEX(10 );
SELECT CONV('1010' , 2 , 10 );
SELECT RAND(), FLOOR (RAND()* 100 )+ 1 ;
SELECT MOD (10 , 3 ), 10 % 3 ;
四。其他常用函数:工具类功能 这类函数涵盖用户查询、数据库查询、数据加密、空值处理等实用功能,是开发中的'小帮手'。
4.1 核心工具函数表 函数 描述 user()查询当前登录 MySQL 的用户(格式:用户名@主机) database()查询当前正在使用的数据库 md5(str)对字符串进行 MD5 加密(返回 32 位字符串) password(str)MySQL 用户密码加密(仅用于用户认证,不推荐业务加密) ifnull(val1, val2)空值处理:val1 为 null 则返回 val2,否则返回 val1
4.2 实战案例
SELECT USER ();
SELECT DATABASE();
SELECT MD5('admin' );
SELECT PASSWORD('root' );
CREATE TABLE user_info (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR (20 ) NOT NULL ,
age INT
);
INSERT INTO user_info (name, age) VALUES ('张三' ,20 ), ('李四' ,NULL ), ('王五' ,25 );
SELECT name, IFNULL(age, 0 ) AS format_age FROM user_info;
五。函数使用避坑指南和总结
日期函数的单位大小写不敏感 :interval 10 day和interval 10 DAY效果一致,但推荐小写;
length 函数按字节计算长度 :utf8 编码下中文占 3 字节,gbk 编码下占 2 字节,需注意字符集影响
substring 函数的位置从 1 开始 :不同于编程语言的 0 起始索引,如substring('mysql', 1, 3)返回 mys;
rand() 函数每次调用生成新值 :如需固定随机数,可结合种子(如 rand(10)),但种子固定后随机序列固定;
ifnull 仅处理 null 值 :空字符串('')、0 等非 null 值不会触发替换,如需处理空字符串可结合case when;
md5 加密不可逆 :仅用于密码存储等场景,不可用于需要解密的数据。
总结 :MySQL 内置函数覆盖了日期、字符串、数学、工具类等核心场景,合理使用能大幅提升 SQL 开发效率。核心要点总结:
日期函数解决时间获取、加减、差值计算,是业务系统的核心工具;
字符串函数处理文本格式、拼接、截取,满足数据展示和清洗需求;
数学函数用于数值运算和格式化,适用于统计、随机数生成等场景;
工具类函数提供加密、空值处理等实用功能,简化开发流程。
相关免费在线工具 SQL 美化和格式化 在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
SQL转CSV/JSON/XML 解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 工具包 CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online