ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MySQL数据库:内置函数

MySQL数据库:内置函数 文章目录MySQL内置函数入门指南零基础也能看懂的日期/字符串/数学函数大全一、日期时间函数你的专属时间管理大师核心函数速查表基础用法演示1. 获取当前时间三件套2. 时间加减法算几天后/几天前3. 算日子差两个日期隔了多少天实战场景场景1记录用户生日场景2查询2分钟内发布的新帖子二、字符串函数文本处理的美颜工具箱核心函数速查表重点避坑 常用演示1. length()别把“字节”当“字符”2. concat()把多列拼成一句话3. replace()批量替换内容4. substring()截取指定位置字符5. 进阶小技巧首字母小写三、数学函数数据库里的自带计算器核心函数速查表常用示例四、其他实用函数杂项工具百宝箱1. 基础信息查询2. 加密函数3. ifnull()空值救星五、实战练手牛客经典OJ题题目思路参考解法六、写在最后MySQL内置函数入门指南零基础也能看懂的日期/字符串/数学函数大全很多刚接触MySQL的小伙伴刚学会增删改查一遇到“算两个日期差几天”“把名字拼成长句”“保留两位小数”这种需求就头大——总不能全靠后端代码算完再塞回数据库吧其实MySQL早就给你预装了一套“官方工具包”——内置函数。就像你手机自带的计算器、日历、相册不用额外安装写SQL的时候直接调用一行就能搞定复杂逻辑。今天咱们就把最常用的四大类内置函数一次性讲透配例子、讲坑点看完就能直接用到项目里。一、日期时间函数你的专属时间管理大师做业务的时候生日、下单时间、发帖时间、登录时间……全是日期时间数据。手动算日期差、加减天数太容易出错了日期函数直接帮你搞定。核心函数速查表函数名称功能描述current_date()获取当前日期年月日current_time()获取当前时间时分秒current_timestamp()获取当前完整时间戳日期时间date(datetime)从 datetime 里提取出日期部分date_add(date, interval 值 单位)给日期/时间加上一段时长date_sub(date, interval 值 单位)给日期/时间减去一段时长datediff(date1, date2)计算两个日期相差的天数now()获取当前日期时间和current_timestamp基本一致基础用法演示1. 获取当前时间三件套-- 获取今天日期selectcurrent_date();-- 结果2017-11-19-- 获取现在几点selectcurrent_time();-- 结果13:51:21-- 获取完整时间戳selectcurrent_timestamp();-- 结果2017-11-19 13:51:482. 时间加减法算几天后/几天前date_add和date_sub是一对好兄弟单位支持year、day、minute、second等等。-- 10天之后是几号selectdate_add(2017-10-28,interval10day);-- 结果2017-11-07-- 2天之前是几号selectdate_sub(2017-10-1,interval2day);-- 结果2017-09-293. 算日子差两个日期隔了多少天datediff(日期1, 日期2) 日期1 - 日期2结果单位是天。selectdatediff(2017-10-10,2016-9-1);-- 结果404实战场景场景1记录用户生日建表的时候直接用current_date()插入当天日期不用后端代码传时间。-- 创建生日表createtabletmp(idintprimarykeyauto_increment,birthdaydate);-- 插入当前日期insertintotmp(birthday)values(current_date());-- 查询效果select*fromtmp;场景2查询2分钟内发布的新帖子论坛、留言板常见需求“只看最新2分钟的留言”。-- 先建一张留言表createtablemsg(idintprimarykeyauto_increment,contentvarchar(30)notnull,sendtimedatetime);-- 插入两条测试数据用now()插入当前时间insertintomsg(content,sendtime)values(hello1,now());insertintomsg(content,sendtime)values(hello2,now());-- 只显示日期不显示时间selectcontent,date(sendtime)frommsg;-- 查询2分钟内发布的帖子select*frommsgwheredate_add(sendtime,interval2minute)now(); 理解逻辑发布时间 2分钟 现在时间 → 说明发布还不到2分钟。二、字符串函数文本处理的美颜工具箱拼接文字、查找字符、替换内容、截取子串、转大小写……这些对字符串的“修修剪剪”都可以用字符串函数在SQL里直接完成。核心函数速查表函数名称功能描述charset(str)返回字符串的字符集concat(str1, str2, ...)拼接多个字符串instr(string, substring)查找子串出现的位置找不到返回0ucase(str)/upper(str)转成大写lcase(str)/lower(str)转成小写left(str, length)从左边截取 length 个字符replace(str, 旧串, 新串)把字符串里的旧串替换成新串length(str)返回字符串的字节长度substring(str, 起始位置, 长度)截取子串trim(str)/ltrim/rtrim去除两端/左/右空格strcmp(str1, str2)逐字符比较两个字符串大小重点避坑 常用演示1. length()别把“字节”当“字符”这是初学者踩坑最多的函数length()返回的是字节数不是字符数英文、数字1个字符 1字节中文在utf8编码下1个汉字 3字节-- 英文长度是5selectlength(hello);-- 5-- 中文3个汉字utf8下是9字节selectlength(你好啊);-- 9✅ 如果你想算“字符数”用char_length(你好啊)结果是3。这个函数在开源社区被反复提醒是新手必踩的经典坑。2. concat()把多列拼成一句话做报表展示的时候超好用直接把字段拼成可读的句子。-- 把学生成绩拼成“XXX的语文是XXX分数学是XXX分”selectconcat(name,的语文是,chinese,分,数学是,math,分)as分数fromstudent;3. replace()批量替换内容想把表里的某个字符批量换掉不用一条条改。-- 把员工名字里的s替换成上海selectreplace(ename,s,上海),enamefromemp;4. substring()截取指定位置字符注意MySQL里字符串位置是从1开始的不是从0开始-- 截取名字第2到第3个字符从第2位开始取2个selectsubstring(ename,2,2),enamefromemp;5. 进阶小技巧首字母小写组合拳用法截取首字母转小写再拼接后面的内容。selectconcat(lcase(substring(ename,1,1)),substring(ename,2))fromemp;三、数学函数数据库里的自带计算器加减乘除、取整、取余、进制转换、随机数……简单的数学计算不用拿到代码里算SQL里直接搞定。核心函数速查表函数名称功能描述abs(number)求绝对值bin(十进制数)十进制转二进制hex(十进制数)十进制转十六进制conv(number, 原进制, 目标进制)任意进制转换ceiling(number)向上取整往大了凑整floor(number)向下取整往小了凑整format(number, 小数位数)格式化数字四舍五入保留小数rand()返回 [0.0, 1.0) 之间的随机浮点数mod(被除数, 除数)取模求余数常用示例-- 绝对值selectabs(-100.2);-- 100.2-- 向上取整只要有小数就进1selectceiling(23.04);-- 24-- 向下取整小数直接砍掉selectfloor(23.7);-- 23-- 保留2位小数四舍五入selectformat(12.3456,2);-- 12.35-- 生成0-1之间的随机数selectrand(); 开源社区常用技巧想生成 0~100 的随机整数selectfloor(rand()*100);四、其他实用函数杂项工具百宝箱还有一些零散但超好用的函数处理用户、数据库、空值、加密等场景。1. 基础信息查询-- 查看当前登录用户selectuser();-- 查看当前正在使用的数据库selectdatabase();2. 加密函数-- md5加密生成32位的加密字符串常用在业务里存密码不建议明文存selectmd5(admin);-- 结果21232f297a57a5a743894a0e4a801fc3-- password()MySQL自己的用户密码加密函数是给MySQL账号用的selectpassword(root);⚠️ 注意业务系统的密码加密推荐用md5或更强的加密方式不要用password()函数它是MySQL内部账号专用的在新版本MySQL中已经逐步废弃。3. ifnull()空值救星这是处理NULL的神器如果第一个参数是NULL就返回第二个参数否则返回第一个参数。-- 不是null返回原值selectifnull(abc,123);-- abc-- 是null返回默认值123selectifnull(null,123);-- 123业务里高频用法比如分数为null的时候显示0ifnull(score, 0)完美解决空值参与计算导致结果为null的问题。五、实战练手牛客经典OJ题题目查找字符串10,A,B中逗号,出现的次数 cnt。思路总长度 - 去掉逗号后的长度 逗号的个数。这是字符串函数的经典组合拳面试和刷题经常遇到。参考解法selectlength(10,A,B)-length(replace(10,A,B,,,))ascnt;六、写在最后MySQL内置函数不用死记硬背用到的时候查一下敲两遍就记住了。核心原则是能在数据库里做完的计算就别拿到应用层代码里做效率更高代码也更简洁。今天讲的都是初学者最常用的函数掌握了这些日常开发里80%的SQL计算需求都能搞定。接下来可以多找几张表练手试着用函数去实现不同的查询需求。
返回列表