MySQL 内置函数指南:日期、字符串、数学函数实战
草莓熊Lotso个人主页❄️个人专栏:《C知识分享》 《Linux 入门到实践零基础也能懂》✨生活是默默的坚持毅力是永久的享受 博主简介文章目录前言一. 日期函数处理时间相关需求1.1 核心日期函数表1.2 实战案例1.2.1 基础时间获取1.2.2 日期加减运算1.2.3 日期差计算与时间提取1.2.4 业务场景查询近期数据二. 字符串函数处理文本数据2.1 核心字符串函数表2.2 实战案例2.2.1 字符串拼接与格式处理2.2.2 字符串截取与替换2.2.3 大小写转换与空格处理2.2.4 字符串长度与位置查询2.2.5 首字母小写格式化三. 数学函数数值计算与处理3.1 核心数学函数表3.2 实战案例四. 其他常用函数工具类功能4.1 核心工具函数表4.2 实战案例五. 函数使用避坑指南和总结结尾前言在 MySQL 开发中内置函数是提升 SQL 效率和灵活性的核心工具。无论是日期计算、字符串处理还是数学运算、数据加密合理使用内置函数能大幅简化代码避免重复逻辑。本文基于实战场景全面拆解 MySQL 常用内置函数涵盖日期、字符串、数学、其他工具类函数附带详细案例和避坑要点。一. 日期函数处理时间相关需求日期函数是业务开发中最常用的函数类别用于获取当前时间、日期加减、时间差计算等场景解决时间相关的数据处理问题。1.1 核心日期函数表函数描述current_date()获取当前日期格式yyyy-mm-ddcurrent_time()获取当前时间格式hh:mm:sscurrent_timestamp()获取当前时间戳格式yyyy-mm-dd hh:mm:ssnow()等同于current_timestamp()获取当前日期时间date(datetime)提取日期时间中的日期部分date_add(date, interval 数值 单位)日期/时间加法单位year/day/hour/minute/seconddate_sub(date, interval 数值 单位)日期/时间减法单位同上datediff(date1, date2)计算 date1 - date2 的天数差仅日期部分1.2 实战案例1.2.1 基础时间获取-- 获取当前日期selectcurrent_date();-- 结果2026-03-10-- 获取当前时间selectcurrent_time();-- 结果12:34:50-- 获取当前时间戳selectcurrent_timestamp();-- 结果2026-03-10 12:34:50selectnow();-- 结果同上更常用1.2.2 日期加减运算-- 日期加10天selectdate_add(2026-03-10,interval10day);-- 结果2026-03-20-- 日期减2年selectdate_sub(2026-03-10,interval2year);-- 结果2024-03-10-- 时间加30分钟selectdate_add(2026-03-10 14:30:00,interval30minute);-- 结果2024-05-20 15:00:00-- 时间减1小时selectdate_sub(2026-03-10 14:30:00,interval1hour);-- 结果2024-05-20 13:30:001.2.3 日期差计算与时间提取-- 计算两个日期的天数差date1 - date2selectdatediff(2024-05-20,2024-01-01);-- 结果140-- 提取datetime中的日期部分createtablemsg(idintprimarykeyauto_increment,contentvarchar(30)notnull,sendtimedatetime);insertintomsg(content,sendtime)values(hello mysql,now()),(hello function,now());-- 仅显示发布日期隐藏时间selectcontent,date(sendtime)assend_datefrommsg;请查询在2分钟内发布的帖子select*frommsgwheredate_add(sendtime,interval2minute)now();1.2.4 业务场景查询近期数据-- 查询2分钟内发布的留言select*frommsgwheredate_add(sendtime,interval2minute)now();-- 查询3天内的生日记录createtableuser_birthday(idintprimarykeyauto_increment,namevarchar(20)notnull,birthdaydate);insertintouser_birthday(name,birthday)values(张三,2000-05-18),(李四,2000-06-01),(王五,2000-05-22);-- 计算当前日期与生日的差值筛选3天内的记录select*fromuser_birthdaywheredatediff(birthday,current_date())between0and3;二. 字符串函数处理文本数据字符串函数用于字符串的拼接、截取、替换、大小写转换等操作解决文本格式处理、内容提取等需求。2.1 核心字符串函数表以下是您提供的字符串函数表格函数名称描述charset(str)返回字符串的字符集如 utf8、gbkconcat(str1, str2, ...)拼接多个字符串instr(str, substr)返回 substr 在 str 中首次出现的位置无则返回 0ucase(str) / upper(str)字符串转大写lcase(str) / lower(str)字符串转小写left(str, length)从 str 左侧截取 length 个字符length(str)返回字符串长度以字节为单位受字符集影响replace(str, search_str, replace_str)用 replace_str 替换 str 中的 search_strsubstring(str, pos [, length])从 str 的 pos 位置1 开始截取 length 个字符length 可选默认到末尾ltrim(str) / rtrim(str) / trim(str)去除字符串左侧 / 右侧 / 两侧的空格strcmp(str1, str2)逐字符比较 str1 和 str2相等返回 0str1 大返回 1否则返回 -12.2 实战案例2.2.1 字符串拼接与格式处理-- 拼接字符串业务场景格式化显示成绩createtableexam_result(namevarchar(20)notnull,chinesefloat,mathfloat,englishfloat);insertintoexam_resultvalues(张三,85,92,78),(李四,90,88,95);-- 格式“XXX的语文XXX分数学XXX分英语XXX分”selectconcat(name,的语文,chinese,分数学,math,分英语,english,分)as成绩详情fromexam_result;2.2.2 字符串截取与替换-- 截取exam_result表中ename字段的第二个到第三个字符selectename,substring(ename,2,2)fromexam_result;-- 替换字符串将ename列中有S的替换为上海selectename,replace(ename,s,上海)fromexam_result;-- 左侧截取取前3个字符selectleft(hello world,3);-- 结果hel2.2.3 大小写转换与空格处理-- 转大写/小写selectucase(mysql),lower(MYSQL);-- 结果MYSQL、mysql-- 去除空格selecttrim( mysql );-- 结果mysql去除两侧空格selectltrim( mysql );-- 结果mysql 仅去除左侧空格2.2.4 字符串长度与位置查询-- 计算字符串长度utf8编码下中文占3字节selectlength(mysql),length(MySQL函数);-- 结果5、1153*211-- 查询子串位置逗号在字符串中出现的位置selectinstr(10,A,B,,);-- 结果3第一个逗号的位置-- 业务场景统计逗号出现次数OJ真题select(length(10,A,B)-length(replace(10,A,B,,,)))ascnt;-- 结果22.2.5 首字母小写格式化-- 员工姓名首字母小写其余不变如SMITH→sMITHcreatetableemp(enamevarchar(20));insertintoempvalues(SMITH),(SCOTT),(WARD);selectconcat(lcase(substring(ename,1,1)),substring(ename,2))asformat_namefromemp;三. 数学函数数值计算与处理数学函数用于数值的运算、进制转换、取整、随机数生成等解决数值处理相关需求。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 % denominator3.2 实战案例-- 绝对值selectabs(-100.5),abs(200);-- 结果100.5、200-- 取整操作selectceiling(23.1),ceiling(23.9);-- 结果24、24向上取整selectfloor(23.1),floor(23.9);-- 结果23、23向下取整-- 数值格式化保留2位小数selectformat(123.456,2),format(78.9,2);-- 结果123.46、78.90-- 进制转换selectbin(10),hex(10);-- 结果1010二进制、A十六进制selectconv(1010,2,10);-- 结果10二进制转十进制-- 随机数生成生成1-100的随机整数selectrand(),floor(rand()*100)1;-- 取模运算求余数selectmod(10,3),10%3;-- 结果1、1四. 其他常用函数工具类功能这类函数涵盖用户查询、数据库查询、数据加密、空值处理等实用功能是开发中的 “小帮手”。4.1 核心工具函数表函数描述user()查询当前登录 MySQL 的用户格式用户名主机database()查询当前正在使用的数据库md5(str)对字符串进行 MD5 加密返回 32 位字符串password(str)MySQL 用户密码加密仅用于用户认证不推荐业务加密ifnull(val1, val2)空值处理val1 为 null 则返回 val2否则返回 val14.2 实战案例-- 查询当前用户和数据库selectuser();-- 结果rootlocalhostselectdatabase();-- 结果当前使用的数据库名如test-- 数据加密业务场景密码存储selectmd5(admin);-- 结果21232f297a57a5a743894a0e4a801fc3MD5加密selectpassword(root);-- 结果*81F5E21E35407D884A6CD4A731AEBFB6AF209E1BMySQL密码加密-- 空值处理避免null影响运算createtableuser_info(idintprimarykeyauto_increment,namevarchar(20)notnull,ageint);insertintouser_info(name,age)values(张三,20),(李四,null),(王五,25);-- 年龄为null时显示0selectname,ifnull(age,0)asformat_agefromuser_info;五. 函数使用避坑指南和总结日期函数的单位大小写不敏感interval 10 day和interval 10 DAY效果一致但推荐小写length函数按字节计算长度utf8 编码下中文占 3 字节gbk 编码下占 2 字节需注意字符集影响substring函数的位置从 1 开始不同于编程语言的 0 起始索引如substring(mysql, 1, 3)返回mysrand ()函数每次调用生成新值如需固定随机数可结合种子如rand(10)但种子固定后随机序列固定ifnull仅处理null值空字符串、0 等非 null 值不会触发替换如需处理空字符串可结合case whenmd5加密不可逆仅用于密码存储等场景不可用于需要解密的数据。总结MySQL 内置函数覆盖了日期、字符串、数学、工具类等核心场景合理使用能大幅提升 SQL 开发效率。核心要点总结日期函数解决时间获取、加减、差值计算是业务系统的核心工具字符串函数处理文本格式、拼接、截取满足数据展示和清洗需求数学函数用于数值运算和格式化适用于统计、随机数生成等场景工具类函数提供加密、空值处理等实用功能简化开发流程。结尾 我是草莓熊 Lotso若这篇技术干货帮你打通了学习中的卡点 【关注】跟我一起深耕技术领域从基础到进阶见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好需要时直接查、随时用 【评论】分享你的经验或疑问比如曾踩过的技术坑一起交流避坑 ️ 【投票】用你的选择助力社区内容方向告诉大家哪个技术点最该重点拆解 技术之路难免有困惑但同行的人会让前进更有方向愿我们都能在自己专注的领域里一步步靠近心中的技术目标结语掌握这些函数后可应对大部分 SQL 开发场景。如果需要针对复杂场景如函数嵌套、自定义函数的进阶用法欢迎在评论区留言交流创作不易觉得有帮助的话欢迎点赞、收藏、关注三连 后续会持续更新 MySQL 进阶技巧带你从入门到精通数据库开发。✨把这些内容吃透超牛的放松下吧✨ʕ˘ᴥ˘ʔづきらど