MySQL 内置函数指南:日期、字符串、数学函数实战

MySQL 内置函数指南:日期、字符串、数学函数实战
在这里插入图片描述

🔥草莓熊Lotso:个人主页
❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受!


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

在 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 基础时间获取

-- 获取当前日期selectcurrent_date();-- 结果:2026-03-10-- 获取当前时间selectcurrent_time();-- 结果:12:34:50-- 获取当前时间戳selectcurrent_timestamp();-- 结果:2026-03-10 12:34:50selectnow();-- 结果同上,更常用

1.2.2 日期加减运算

-- 日期加10天select date_add('2026-03-10',interval10day);-- 结果:2026-03-20-- 日期减2年select date_sub('2026-03-10',interval2year);-- 结果:2024-03-10-- 时间加30分钟select date_add('2026-03-10 14:30:00',interval30minute);-- 结果:2024-05-20 15:00:00-- 时间减1小时select date_sub('2026-03-10 14:30:00',interval1hour);-- 结果:2024-05-20 13:30:00

1.2.3 日期差计算与时间提取

-- 计算两个日期的天数差(date1 - date2)select datediff('2024-05-20','2024-01-01');-- 结果:140-- 提取datetime中的日期部分createtable msg ( id intprimarykeyauto_increment, content varchar(30)notnull, sendtime datetime);insertinto msg(content, sendtime)values('hello mysql',now()),('hello function',now());-- 仅显示发布日期,隐藏时间select content,date(sendtime)as send_date from msg;
  • 请查询在2分钟内发布的帖子
select*from msg where date_add(sendtime,interval2minute)>now();
在这里插入图片描述

1.2.4 业务场景:查询近期数据

-- 查询2分钟内发布的留言select*from msg where date_add(sendtime,interval2minute)>now();-- 查询3天内的生日记录createtable user_birthday ( id intprimarykeyauto_increment, name varchar(20)notnull, birthday date);insertinto user_birthday(name, birthday)values('张三','2000-05-18'),('李四','2000-06-01'),('王五','2000-05-22');-- 计算当前日期与生日的差值,筛选3天内的记录select*from user_birthday where datediff(birthday,current_date())between0and3;

二. 字符串函数:处理文本数据

字符串函数用于字符串的拼接、截取、替换、大小写转换等操作,解决文本格式处理、内容提取等需求。

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 字符串拼接与格式处理

-- 拼接字符串(业务场景:格式化显示成绩)createtable exam_result ( name varchar(20)notnull, chinese float, math float, english float);insertinto exam_result values('张三',85,92,78),('李四',90,88,95);-- 格式:“XXX的语文XXX分,数学XXX分,英语XXX分”select concat(name,'的语文', chinese,'分,数学', math,'分,英语', english,'分')as 成绩详情 from exam_result;

2.2.2 字符串截取与替换

-- 截取exam_result表中ename字段的第二个到第三个字符 select ename, substring(ename,2,2)from exam_result;-- 替换字符串(将ename列中有'S'的替换为'上海')select ename,replace(ename,'s','上海')from exam_result;-- 左侧截取(取前3个字符)selectleft('hello world',3);-- 结果:hel

2.2.3 大小写转换与空格处理

-- 转大写/小写selectucase('mysql'), lower('MYSQL');-- 结果:MYSQL、mysql-- 去除空格select trim(' mysql ');-- 结果:mysql(去除两侧空格)select ltrim(' mysql ');-- 结果:mysql (仅去除左侧空格)

2.2.4 字符串长度与位置查询

-- 计算字符串长度(utf8编码下,中文占3字节)select length('mysql'), length('MySQL函数');-- 结果:5、11(5+3*2=11)-- 查询子串位置(逗号在字符串中出现的位置)select instr('10,A,B',',');-- 结果:3(第一个逗号的位置)-- 业务场景:统计逗号出现次数(OJ真题)select(length('10,A,B')- length(replace('10,A,B',',','')))as cnt;-- 结果:2

2.2.5 首字母小写格式化

-- 员工姓名首字母小写,其余不变(如SMITH→sMITH)createtable emp (ename varchar(20));insertinto emp values('SMITH'),('SCOTT'),('WARD');select concat(lcase(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);-- 结果:100.5、200-- 取整操作select ceiling(23.1), ceiling(23.9);-- 结果:24、24(向上取整)select floor(23.1), floor(23.9);-- 结果:23、23(向下取整)-- 数值格式化(保留2位小数)selectformat(123.456,2),format(78.9,2);-- 结果:123.46、78.90-- 进制转换select bin(10), hex(10);-- 结果:1010(二进制)、A(十六进制)select conv('1010',2,10);-- 结果:10(二进制转十进制)-- 随机数生成(生成1-100的随机整数)select rand(), 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,否则返回 val1

4.2 实战案例

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
-- 查询当前用户和数据库selectuser();-- 结果:root@localhostselectdatabase();-- 结果:当前使用的数据库名(如test)-- 数据加密(业务场景:密码存储)select md5('admin');-- 结果:21232f297a57a5a743894a0e4a801fc3(MD5加密)select password('root');-- 结果:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B(MySQL密码加密)-- 空值处理(避免null影响运算)createtable user_info ( id intprimarykeyauto_increment, name varchar(20)notnull, age int);insertinto user_info(name, age)values('张三',20),('李四',null),('王五',25);-- 年龄为null时显示0select name, ifnull(age,0)as format_age from user_info;

五. 函数使用避坑指南和总结

  • 日期函数的单位大小写不敏感interval 10 dayinterval 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 开发效率。核心要点总结:

  • 日期函数解决时间获取、加减、差值计算,是业务系统的核心工具;
  • 字符串函数处理文本格式、拼接、截取,满足数据展示和清洗需求;
  • 数学函数用于数值运算和格式化,适用于统计、随机数生成等场景;
  • 工具类函数提供加密、空值处理等实用功能,简化开发流程。

结尾:

🍓 我是草莓熊 Lotso!若这篇技术干货帮你打通了学习中的卡点: 👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用 💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑 🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解 技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标! 

结语:掌握这些函数后,可应对大部分 SQL 开发场景。如果需要针对复杂场景(如函数嵌套、自定义函数)的进阶用法,欢迎在评论区留言交流!创作不易,觉得有帮助的话,欢迎点赞、收藏、关注三连~ 后续会持续更新 MySQL 进阶技巧,带你从入门到精通数据库开发。

✨把这些内容吃透超牛的!放松下吧✨ʕ˘ᴥ˘ʔづきらど

Read more

Vivado完整license文件获取与配置指南

本文还有配套的精品资源,点击获取 简介:Vivado是由Xilinx开发的FPGA和SoC设计综合工具,支持Verilog、VHDL等硬件描述语言,提供高级综合、仿真、IP集成等功能。本资源包“Vivado_的license文件.zip”包含用于解锁Vivado完整功能的许可证文件。介绍了许可证服务器配置、.lic文件管理、浮动与固定许可证区别、激活流程、更新与诊断等核心内容。适用于FPGA开发者、嵌入式系统工程师及学习者,帮助其合法配置Vivado环境,提升开发效率和项目执行能力。 1. Vivado工具与FPGA开发环境概述 Xilinx Vivado设计套件是面向FPGA和SoC开发的集成化软件平台,广泛应用于通信、工业控制、人工智能、嵌入式视觉等多个高科技领域。其核心功能包括项目创建、综合、实现、仿真、调试及系统级集成,支持从设计输入到硬件验证的全流程开发。 Vivado不仅提供了图形化界面(GUI)便于初学者快速上手,还支持Tcl脚本自动化操作,满足高级用户的大规模工程管理需求。其模块化架构设计使得开发者可以灵活选择所需功能组件,如HLS(高层次综合)、IP In

By Ne0inhk
【讨论】VR + 具身智能 + 人形机器人:通往现实世界的智能接口

【讨论】VR + 具身智能 + 人形机器人:通往现实世界的智能接口

摘要:本文探讨了“VR + 具身智能 + 人形机器人”作为通往现实世界的智能接口的前沿趋势。文章从技术融合、应用场景、商业潜力三个维度分析其价值,涵盖工业协作、教育培训、医疗康复、服务陪护等领域,并展望VR赋能下的人机共生未来,揭示具身智能如何推动机器人真正理解、感知并参与现实世界。 VR + 具身智能 + 人形机器人:通往现实世界的智能接口 文章目录 * VR + 具身智能 + 人形机器人:通往现实世界的智能接口 * 一、引言:三股力量的融合,正在重塑现实世界 * 二、具身智能:让AI拥有“身体”的智慧 * 1. 什么是具身智能(Embodied Intelligence) * 2. 为什么VR是具身智能的“孵化器” * 三、VR + 具身智能 + 人形机器人:协同结构与原理 * 1. 系统组成 * 2. 人类的“

By Ne0inhk
Flutter 组件 bip340 适配鸿蒙 HarmonyOS 实战:次世代 Schnorr 签名,为鸿蒙 Web3 与隐私计算筑牢加密防线

Flutter 组件 bip340 适配鸿蒙 HarmonyOS 实战:次世代 Schnorr 签名,为鸿蒙 Web3 与隐私计算筑牢加密防线

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 bip340 适配鸿蒙 HarmonyOS 实战:次世代 Schnorr 签名,为鸿蒙 Web3 与隐私计算筑牢加密防线 前言 在鸿蒙(OpenHarmony)生态迈向去中心化金融(DeFi)、隐私通讯及安全资产管理等高阶安全场景的背景下,如何实现更高性能、更具扩展性且抗攻击能力的数字签名架构,已成为决定应用闭环安全性的“压舱石”。在鸿蒙设备这类强调分布式鉴权与芯片级安全(TEE/SE)的移动终端上,如果依然沿用传统的 ECDSA 签名算法,由于由于其固有的可延展性风险与高昂的聚合验证成本,极易由于由于在大规模节点验证时的 CPU 负载过高导致交互滞后。 我们需要一种能够实现签名线性聚合、计算逻辑极简且具备原生抗延展性的密码学方案。 bip340 为 Flutter 开发者引入了比特币 Taproot 升级的核心——Schnorr 签名算法。它不仅在安全性上超越了传统标准,更通过其线性的数学特性,

By Ne0inhk
《MySQL 表基础语法:从入门到熟练的核心技巧》

《MySQL 表基础语法:从入门到熟练的核心技巧》

前引:MySQL 表的增删查是数据库操作的基础,也是日常开发、数据分析中最高频的需求。很多初学者会卡在语法细节、场景适配或效率优化上,明明掌握了基础命令,实际应用中却频频出错。本文聚焦 “实用 + 避坑”,从核心语法到高频场景,再到优化技巧,帮你彻底吃透 MySQL 表增删查,告别 “只会用不会用对” 的尴尬 SQL查询中各个关键字的执行先后顺序: from > on> join > where > group by > with > having > select > distinct > order by > limit 目录 【一】增 (1)基本创建 (2)

By Ne0inhk