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

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中的各种数据操作需求。后续可根据实际业务场景灵活组合这些函数,实现更复杂的逻辑。

http://www.xdnf.cn/news/11002.html

相关文章:

  • 开发体育比分平台,有哪些坑需要注意的
  • Gephi中的Isometric Layout 插件使用应该用什么数据格式
  • UE5 2D角色PaperZD插件动画状态机学习笔记
  • el-select 实现分页加载,切换也数滚回到顶部,自定义高度
  • 2025.5.28 需求文档的撰写
  • xxhash和md5
  • 接口自动化测试之pytest 运行方式及前置后置封装
  • 蓝桥杯_DS18B20温度传感器---新手入门级别超级详细解析
  • 多模态大模型中的Projector模块深度解析
  • 苍穹外卖--HttpClient
  • Nginx上传大文件的配置
  • 普中STM32F103ZET6开发攻略(四)
  • 【Prompt实战】国际翻译小组
  • I2C 通信协议
  • Java并发编程:读写锁与普通互斥锁的深度对比
  • GitHub 趋势日报 (2025年06月02日)
  • Excel表格批量下载 CyberWin Excel Doenlaoder 智能编程-——玄武芯辰
  • IP查询与网络风险的关系
  • 基础知识掌握
  • 构建基于深度学习的人体姿态估计系统 数据预处理到模型训练、评估和部署 _如何利用人体姿态识别估计数据集_数据进行人体姿态估计研究的建议Human3.6M
  • Web前端为什么要打包?Webpack 和 Vite 如何助力现代开发?
  • 【Redis】set 类型
  • 腾讯下乡了。。。
  • Linux远程连接主机——ssh命令详解
  • 适老化场景重构:现代家政老年照护虚拟仿真实训室建设方案​
  • 结构性设计模式之Composite(组合)
  • AUTOSAR CP——Can模块
  • 游戏开发常见数据压缩
  • [蓝桥杯]上三角方阵
  • Termux下如何使用MATLAB