当前位置: 首页 > news >正文

07.MySQL内置函数

MySQL内置函数

日期函数

字符串函数

数学函数

其他函数


MySQL内置函数

MySQL内置函数是数据库操作中非常实用的工具,它们能够帮助开发者高效地处理各种数据类型,包括日期、字符串、数值等。这些函数不仅简化了SQL语句的编写,还能提升查询性能和代码可读性。本文将详细解析MySQL中常见的内置函数,涵盖日期函数、字符串函数、数学函数以及其他实用函数,并通过实际案例演示它们的应用场景。


日期函数

日期函数用于处理日期和时间相关的操作,比如获取当前时间、日期加减、计算日期差值等。以下是MySQL中常用的日期函数及其用法。

常用日期函数列表

函数名称描述
current_date()获取当前日期
current_time()获取当前时间
current_timestamp()获取当前时间戳
now()获取当前日期和时间
date(datetime)提取日期时间中的日期部分
date_add(date, interval d_value_type)在指定日期上增加时间间隔
date_sub(date, interval d_value_type)在指定日期上减少时间间隔
datediff(date1, date2)计算两个日期之间的天数差

函数详解

current_date() 函数

current_date() 用于获取当前的日期。例如:

SELECT current_date();

执行后会返回类似 2023-10-05 的日期。

current_time() 函数

current_time() 返回当前时间,不包含日期部分。例如:

SELECT current_time();

结果可能是 14:30:45

current_timestamp() 函数

current_timestamp() 返回完整的日期和时间信息,格式为 YYYY-MM-DD HH:MM:SS。例如:

SELECT current_timestamp();
now() 函数

now()current_timestamp() 类似,但 now() 的执行时间点是在语句开始时确定的,而 current_timestamp() 的执行时间点是在函数调用时确定的。

date(datetime) 函数

date() 函数用于提取日期时间中的日期部分。例如:

SELECT date('2023-10-05 14:30:45');

结果为 2023-10-05

date_add()date_sub() 函数

这两个函数用于对日期进行加减操作。例如:

-- 在当前日期基础上加2天
SELECT date_add(current_date(), interval 2 day);-- 在当前日期基础上减1个月
SELECT date_sub(current_date(), interval 1 month);

如果传入的间隔值为负数,则效果相反。例如:

-- 相当于 date_sub
SELECT date_add(current_date(), interval -1 day);
datediff() 函数

datediff() 计算两个日期之间的天数差。例如:

SELECT datediff('2023-10-05', '2023-10-01');

结果为 4

综合案例

假设我们需要创建一个评论表,记录用户的评论时间。表结构如下:

CREATE TABLE comments (id INT AUTO_INCREMENT PRIMARY KEY,nickname VARCHAR(50),content TEXT,sendtime DATETIME
);

插入数据时可以直接使用 now() 指定时间:

INSERT INTO comments (nickname, content, sendtime)
VALUES ('用户A', '这是一条评论', now());

查询时若只需显示日期部分,可以用 date() 截取:

SELECT nickname, content, date(sendtime) AS comment_date FROM comments;

若需筛选最近2分钟的评论,可以结合 date_add()now()

SELECT * FROM comments
WHERE sendtime > date_add(now(), interval -2 minute);

字符串函数

字符串函数用于处理文本数据,包括拼接、截取、替换、大小写转换等操作。

常用字符串函数列表

函数名称描述
charset(str)获取字符串使用的字符集
concat(str1, str2...)拼接多个字符串
instr(str, substr)查找子字符串在主字符串中的位置
ucase(str)将字符串转换为大写
lcase(str)将字符串转换为小写
left(str, length)从左侧开始截取指定长度的字符
length(str)获取字符串的字节长度
replace(str, old, new)替换字符串中的指定内容
strcmp(str1, str2)比较两个字符串的大小
substring(str, pos, len)从指定位置截取指定长度的子字符串
ltrim(str) / rtrim(str) / trim(str)去除字符串前/后/前后空格

函数详解

charset() 函数

charset() 返回字符串使用的字符集。例如:

SELECT charset('你好');

结果可能是 utf8mb4

concat() 函数

concat() 用于拼接多个字符串。例如:

SELECT concat('Hello', ' ', 'World');

结果为 Hello World

instr() 函数

instr() 查找子字符串首次出现的位置(从1开始)。例如:

SELECT instr('abcdef', 'cd');

结果为 3

ucase()lcase() 函数

这两个函数分别将字符串转换为大写或小写:

SELECT ucase('hello'), lcase('WORLD');

结果分别为 HELLOworld

left() 函数

left() 从左侧截取指定长度的字符:

SELECT left('abcdef', 3);

结果为 abc

length() 函数

length() 返回字符串的字节长度。例如:

SELECT length('你好');

utf8mb4 编码下结果为 6(每个汉字占3字节)。

replace() 函数

replace() 替换字符串中的内容:

SELECT replace('Hello World', 'World', 'MySQL');

结果为 Hello MySQL

strcmp() 函数

strcmp() 比较两个字符串的大小(区分大小写):

SELECT strcmp('abc', 'abd');

结果为 -1(因为 c < d)。

substring() 函数

substring() 从指定位置截取子字符串:

SELECT substring('abcdef', 2, 3);

结果为 bcd

ltrim() / rtrim() / trim() 函数

这些函数用于去除空格:

SELECT trim('  abc  '); -- 结果为 'abc'
SELECT ltrim('  abc  '); -- 结果为 'abc  '
SELECT rtrim('  abc  '); -- 结果为 '  abc'

综合案例

假设员工表 employees 包含姓名 ename,要求显示首字母小写的姓名。可以使用以下方法:

SELECT concat(lcase(left(ename, 1)), substring(ename, 2)) AS formatted_name
FROM employees;

数学函数

数学函数用于处理数值计算,包括取绝对值、进制转换、四舍五入、随机数生成等。

常用数学函数列表

函数名称描述
abs(number)返回绝对值
bin(decimal)十进制转二进制
hex(decimal)十进制转十六进制
conv(number, from_base, to_base)进制转换
ceiling(number)向上取整
floor(number)向下取整
format(number, n)格式化数值(保留n位小数)
rand()生成随机浮点数(范围 [0.0, 1.0))
mod(number, denominator)取余运算

函数详解

abs() 函数

返回绝对值:

SELECT abs(-100); -- 结果为 100
bin()hex() 函数

将十进制转换为二进制或十六进制:

SELECT bin(10); -- 结果为 '1010'
SELECT hex(255); -- 结果为 'FF'
conv() 函数

进制转换示例:

SELECT conv('1010', 2, 10); -- 二进制转十进制(结果为10)
SELECT conv('FF', 16, 10); -- 十六进制转十进制(结果为255)
ceiling()floor() 函数

向上/向下取整:

SELECT ceiling(3.2); -- 结果为 4
SELECT floor(3.9); -- 结果为 3
format() 函数

格式化数值并四舍五入:

SELECT format(12345.6789, 2); -- 结果为 '12,345.68'
rand() 函数

生成随机数:

SELECT rand(); -- 返回 [0.0, 1.0) 的随机数
mod() 函数

取余运算:

SELECT mod(10, 3); -- 结果为 1

其他函数

除了上述函数外,MySQL还提供了一些实用工具函数。

user() 函数

返回当前用户和主机名:

SELECT user(); -- 可能返回 'root@localhost'

md5() 函数

生成字符串的MD5摘要:

SELECT md5('password'); -- 返回32位十六进制字符串

database() 函数

显示当前使用的数据库:

SELECT database(); -- 返回当前数据库名

password() 函数

加密用户密码(已不推荐使用):

SELECT password('secret');

ifnull() 函数

处理NULL值:

SELECT ifnull(NULL, 'default'); -- 返回 'default'

通过以上函数的学习和实践,开发者可以更高效地处理MySQL中的各种数据操作需求。后续可根据实际业务场景灵活组合这些函数,实现更复杂的逻辑。

相关文章:

  • 张雪峰为9岁女儿申请40个左右商标!
  • 【数据库】《DBA实战手记》- 读书笔记
  • MyBatis常用注解全解析:从基础CRUD到高级映射
  • 工作服/反光衣检测算法AI智能分析网关V4安全作业风险预警方案:筑牢矿山/工地/工厂等多场景安全防线
  • 攻防世界-unseping
  • 新版 Xcode 中 CoreData 模型编辑器显示拓扑图功能取消的替代方案
  • Python与数据分析期末复习笔记
  • 数字商城小程序源码,开启便捷电商新体验
  • 高考数学易错考点01 | 临阵磨枪
  • Java高级 | (二十二)Java常用类库
  • C++概率论算法详解:理论基础与实践应用
  • 快速上手pytest
  • 【SAP FICO】在建工程及固定资产
  • [Java 基础]变量,装东西的盒子
  • Linux 下 ChromeDriver 安装
  • Redisson学习专栏(五):源码阅读及Redisson的Netty通信层设计
  • 【分布式技术】KeepAlived高可用架构科普
  • 系统架构设计论文
  • 3.2 HarmonyOS NEXT跨设备任务调度与协同实战:算力分配、音视频协同与智能家居联动
  • P1438 无聊的数列/P1253 扶苏的问题
  • 上海市建设和城乡建设委员会网站/海外网站建站
  • 网站制作 流程/头条搜索
  • 江苏网站建设多少钱/个人网站制作模板
  • 无锡做网站服务/湘潭seo公司
  • 南通 外贸建站/公司百度官网优化
  • 教做家庭菜的网站/91关键词排名