【MYSQL】MYSQL学习的一大重点:内置函数

【MYSQL】MYSQL学习的一大重点:内置函数 个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录0 ~ MySQL 内置函数0.1 日期类函数0.2 字符串类函数0.3 数学类函数0.4 其他系统函数1 ~ 日期类函数1.1 基础时间获取函数1.1.1 current_date()1.1.2 current_time()1.1.3 current_timestamp()1.1.4 now()1.2 日期提取与运算函数1.2.1 date(datetime)1.2.2 date_add (date, INTERVAL 值 单位)1.2.3 date_sub (date, INTERVAL 值 单位)1.2.4 datediff(date1, date2)1.3 实战案例案例 1生日表设计与数据插入案例 2留言表与时间范围查询2 ~ 字符串类函数2.1 字符集与拼接函数2.1.1 charset(str)2.1.2 concat(str1, str2, ...)2.2 查找与截取函数2.2.1 instr(string, substring)2.2.2 left(str, length) / right(str, length)2.2.3 substring(str, position [, length])2.3 长度与替换函数2.3.1 length (str) 【高频考点】2.3.2 replace(str, search_str, replace_str)2.4 大小写转换与比较2.4.1 ucase(str) / lcase(str)2.4.2 strcmp(str1, str2)2.5 空格清洗函数2.5.1 ltrim() / rtrim() / trim()2.6 实战案例案例首字母小写显示员工姓名3 ~ 数学类函数3.1 基础数值运算3.1.1 abs(number)3.1.2 mod(number, denominator)3.2 进制转换函数3.2.1 bin(decimal_number)3.2.2 hex(decimalNumber)3.2.3 conv(number, from_base, to_base)3.3 取整与格式化3.3.1 ceiling(number) / floor(number)3.3.2 format(number, decimal_places)3.4 随机数函数3.4.1 rand()4 ~ 其他常用函数4.1 系统信息函数4.1.1 user()4.1.2 database()4.2 加密摘要函数4.2.1 md5(str)4.2.2 password(str)4.3 空值处理函数4.3.1 ifnull(val1, val2)4.3.2 补充isnull (expr)结尾0 ~ MySQL 内置函数0.1 日期类函数时间获取current_date()/current_time()/current_timestamp()/now()日期提取date()日期运算date_add()/date_sub()/datediff()0.2 字符串类函数基础属性charset()/length()/char_length()拼接与截取concat()/left()/right()/substring()查找与替换instr()/replace()格式转换ucase()/lcase()比较与清洗strcmp()/ltrim()/rtrim()/trim()0.3 数学类函数数值运算abs()/mod()进制转换bin()/hex()/conv()取整格式化ceiling()/floor()/format()随机数rand()0.4 其他系统函数系统信息user()/database()加密摘要md5()/password()空值处理ifnull()/isnull()1 ~ 日期类函数1.1 基础时间获取函数1.1.1 current_date()功能获取当前系统日期格式为YYYY-MM-DD仅包含年月日。示例SELECTcurrent_date();-- 输出示例2023-06-071.1.2 current_time()功能获取当前系统时间格式为HH:MM:SS仅包含时分秒。示例SELECTcurrent_time();-- 输出示例14:23:471.1.3 current_timestamp()功能获取当前时间戳格式为YYYY-MM-DD HH:MM:SS包含完整日期时间随系统时间实时递增。示例SELECTcurrent_timestamp();-- 输出示例2023-06-07 14:24:551.1.4 now()功能获取当前完整日期时间返回格式与current_timestamp()一致为 SQL 中最常用的时间获取函数。示例SELECTnow();-- 输出示例2023-06-07 14:25:421.2 日期提取与运算函数1.2.1 date(datetime)功能提取 datetime 类型参数中的日期部分丢弃时分秒。常用场景从完整时间字段中提取日期做分组统计。示例-- 从指定时间中提取日期SELECTdate(1949-10-01 00:00:00);-- 输出1949-10-01-- 嵌套使用提取当前日期SELECTdate(now());-- 效果等价于 current_date()1.2.2 date_add (date, INTERVAL 值 单位)功能在指定日期 / 时间基础上增加指定时长的时间量。支持单位year、month、day、hour、minute、second。示例-- 日期加10天SELECTdate_add(2017-10-28,INTERVAL10day);-- 输出2017-11-07-- 当前时间加10分钟SELECTdate_add(now(),INTERVAL10minute);1.2.3 date_sub (date, INTERVAL 值 单位)功能在指定日期 / 时间基础上减去指定时长的时间量单位与date_add一致。示例-- 日期减10天SELECTdate_sub(2050-01-01,INTERVAL10day);-- 输出2049-12-22-- 当前时间减2分钟常用作“近N分钟数据查询”SELECTdate_sub(now(),INTERVAL2minute);1.2.4 datediff(date1, date2)功能计算两个日期的差值返回单位为天计算规则为date1 - date2。注意仅计算日期部分的差值忽略时分秒。示例SELECTdatediff(2010-10-10,2016-09-01);-- 输出-2153前者小于后者结果为负-- 计算建国至今天数SELECTdatediff(date(now()),1949-10-01);1.3 实战案例案例 1生日表设计与数据插入-- 建表CREATETABLEtmp(idBIGINTPRIMARYKEYAUTO_INCREMENT,birthdayDATENOTNULL);-- 规范插入使用日期函数/date()包裹避免隐式转换warningINSERTINTOtmp(birthday)VALUES(current_date());INSERTINTOtmp(birthday)VALUES(date(current_timestamp()));INSERTINTOtmp(birthday)VALUES(1980-01-01);案例 2留言表与时间范围查询-- 建表CREATETABLEmsg(idBIGINTPRIMARYKEYAUTO_INCREMENT,contentVARCHAR(100)NOTNULL,sendtimeDATETIME);-- 插入数据INSERTINTOmsg(content,sendtime)VALUES(纸上得来终觉浅,now());-- 需求1只显示发布日期不显示时间SELECTcontent,date(sendtime)FROMmsg;-- 需求2查询2分钟内发布的帖子-- 推荐写法字段不参与运算可命中索引SELECT*FROMmsgWHEREsendtimedate_sub(now(),INTERVAL2minute);-- 不推荐写法字段参与运算无法命中索引SELECT*FROMmsgWHEREdate_add(sendtime,INTERVAL2minute)now();2 ~ 字符串类函数2.1 字符集与拼接函数2.1.1 charset(str)功能返回字符串的字符集编码。常用场景排查乱码问题确认字段的字符集。示例SELECTcharset(abcd);-- 输出utf8-- 查询表字段的字符集SELECTcharset(ename)FROMemp;2.1.2 concat(str1, str2, …)功能拼接多个字符串数字、浮点数会自动转为字符串后拼接。注意任意参数为NULL时返回结果整体为NULL。示例-- 基础拼接SELECTconcat(a,b,c);-- 输出abc-- 业务场景格式化成绩展示SELECTconcat(考生姓名:,name,,总分:,chinesemathenglish)ASmsgFROMexam_result;2.2 查找与截取函数2.2.1 instr(string, substring)功能返回子串在主串中首次出现的位置位置从 1 开始计数未找到返回 0。示例SELECTinstr(abcd1234efg,1234);-- 输出52.2.2 left(str, length) / right(str, length)功能从字符串左侧 / 右侧截取指定长度的字符。示例SELECTleft(abcd1234,3);-- 输出abcSELECTright(abcd1234,3);-- 输出2342.2.3 substring(str, position [, length])功能从指定位置开始截取字符串可指定截取长度不指定长度则截取到末尾。注意位置从 1 开始计数。示例-- 从第2个字符开始截取2个字符SELECTsubstring(SMITH,2,2);-- 输出MI-- 从第2个字符截取到末尾SELECTsubstring(SMITH,2);-- 输出MITH2.3 长度与替换函数2.3.1 length (str) 【高频考点】功能返回字符串的字节长度单位为字节。核心区分length()字节长度UTF-8 下 1 个汉字占 3 字节1 个英文字母占 1 字节。char_length()字符长度无论中英文1 个字符算 1 个。示例SELECTlength(abc);-- 输出3SELECTlength(你好);-- UTF-8下输出6SELECTchar_length(你好);-- 输出22.3.2 replace(str, search_str, replace_str)功能将字符串中所有的search_str替换为replace_str。注意仅作用于查询结果不修改数据库原数据。示例-- 将员工姓名中的S替换为“上海”SELECTreplace(ename,S,上海),enameFROMemp;2.4 大小写转换与比较2.4.1 ucase(str) / lcase(str)功能将字符串全部转为大写 / 小写非字母字符保持不变。示例SELECTucase(abcd1234ABCD);-- 输出ABCD1234ABCDSELECTlcase(abcd1234ABCD);-- 输出abcd1234abcd2.4.2 strcmp(str1, str2)功能逐字符比较两个字符串大小。返回规则str1 str2 → 返回 1str1 str2 → 返回 0str1 str2 → 返回 - 12.5 空格清洗函数2.5.1 ltrim() / rtrim() / trim()功能ltrim(str)去除字符串左侧空格rtrim(str)去除字符串右侧空格trim(str)去除字符串左右两侧空格注意均不会去除字符串中间的空格。示例SELECTtrim( 你好 hello );-- 输出你好 hello2.6 实战案例案例首字母小写显示员工姓名SELECTconcat(lcase(substring(ename,1,1)),-- 首字母转小写substring(ename,2)-- 拼接剩余字符)ASlower_first_ename,enameFROMemp;3 ~ 数学类函数3.1 基础数值运算3.1.1 abs(number)功能返回数值的绝对值。示例SELECTabs(-12.3);-- 输出12.33.1.2 mod(number, denominator)功能取模求余运算结果符号与被除数一致。示例SELECTmod(-10,3);-- 输出-1SELECTmod(10,-3);-- 输出13.2 进制转换函数3.2.1 bin(decimal_number)功能将十进制整数转换为二进制字符串。注意传入浮点数时会先取整再转换。示例SELECTbin(10);-- 输出1010SELECTbin(3.14);-- 先取整为3输出113.2.2 hex(decimalNumber)功能将十进制整数转换为十六进制字符串。示例SELECThex(15);-- 输出F3.2.3 conv(number, from_base, to_base)功能通用进制转换支持 2~36 进制之间的任意转换。示例-- 十进制10转二进制SELECTconv(10,10,2);-- 输出1010-- 十进制10转十六进制SELECTconv(10,10,16);-- 输出A3.3 取整与格式化3.3.1 ceiling(number) / floor(number)功能ceiling()向上取整向数值更大的方向取整floor()向下取整向数值更小的方向取整示例SELECTceiling(3.1);-- 输出4SELECTceiling(-3.9);-- 输出-3SELECTfloor(4.9);-- 输出4SELECTfloor(-4.1);-- 输出-53.3.2 format(number, decimal_places)功能格式化数字保留指定小数位数遵循四舍五入规则。示例SELECTformat(3.1415926,2);-- 输出3.14SELECTformat(3.1415926,3);-- 输出3.1423.4 随机数函数3.4.1 rand()功能返回[0.0, 1.0)范围内的随机浮点数。常用技巧生成 0~100 随机数rand() * 100生成 0~100 整数floor(rand() * 100)示例-- 生成0~100的随机整数SELECTfloor(rand()*100);4 ~ 其他常用函数4.1 系统信息函数4.1.1 user()功能查询当前登录的 MySQL 用户。示例SELECTuser();4.1.2 database()功能查询当前正在使用的数据库。示例SELECTdatabase();4.2 加密摘要函数4.2.1 md5(str)功能对字符串进行 MD5 哈希摘要返回 32 位小写十六进制字符串。常用场景用户密码非明文存储注MD5 为哈希算法不可逆不属于加密。示例SELECTmd5(admin);-- 输出21232f297a57a5a743894a0e4a801fc3-- 用户登录校验SELECTnameFROMuserWHEREname李四ANDpasswordmd5(hellobit);4.2.2 password(str)功能MySQL 内置的账号密码哈希函数用于 MySQL 内部用户密码加密。重要警示MySQL 8.0 版本已正式移除该函数仅 5.7 及更早版本可用。仅用于 MySQL 内部账号管理严禁在业务表中使用该函数存储用户密码。业务场景推荐使用 MD5、SHA2 等通用哈希算法。4.3 空值处理函数4.3.1 ifnull(val1, val2)功能如果val1为NULL则返回val2否则返回val1。常用场景将 NULL 值替换为默认值避免数值运算结果为 NULL。示例SELECTifnull(null,10);-- 输出10SELECTifnull(abc,123);-- 输出abc4.3.2 补充isnull (expr)功能判断表达式是否为 NULL是则返回 1否则返回 0。与 ifnull 的核心区别isnull是判断函数返回 0/1 布尔值ifnull是替换函数返回具体业务值。示例SELECTisnull(null);-- 输出1SELECTisnull(abc);-- 输出0结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【MYSQL】MYSQL学习的一大重点基本查询下博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა