news 2026/8/3 5:24:09

MySQL数据库原理与实践(五):内置函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL数据库原理与实践(五):内置函数

本篇目标:

  • 了解 MySQL 内置函数的概念及作用,掌握函数的基本使用方式。
  • 掌握常用字符串函数、数值函数、日期函数的使用方法,能够对数据进行简单处理。
  • 掌握聚合函数的使用,能够完成数据统计与分析操作。
  • 掌握条件判断函数的使用,实现 SQL 中的数据逻辑处理。
  • 能够在实际 SQL 查询中灵活运用内置函数,提高数据查询和处理能力。

一.函数

1.日期函数

1.1.介绍与简单使用

函数名称描述
current_date()当前日期
current_time()当前时间
current_timestamp()当前时间戳
date(datetime)返回 datetime 参数的日期部分
date_add(date, interval d_value_type)在 date 中添加日期或时间,interval 后的数值单位可以是:year、month、day、hour、minute、second
date_sub(date, interval d_value_type)在 date 中减去日期或时间,interval 后的数值单位可以是:year、month、day、hour、minute、second
datediff(date1, date2)两个日期的差,单位是天
now()当前日期时间

使用案例

<1>.获得年月日:

select current_date();

<2>.获得时分秒:

select current_time();

<3>.获得时间戳,也就是具体的时间:

select current_timestamp();

select now();

注意:在 MySQL 中,current_timestamp()now()返回值和功能基本一致,主要区别在于前者属于 SQL 标准函数,后者是 MySQL 中更常用、更简洁的写法。

<4>.在日期的基础上加日期:

select date_add('2017-10-28', interval 10 day); select date_add('2017-10-28', interval 10 year); select date_add('2017-10-28', interval 10 month);

<5>.在日期的基础上减去时间:

select date_sub('2027-10-1', interval 2 day); select date_sub('2027-10-1', interval 2 month); select date_sub('2027-10-1', interval 2 year);

<6>.计算两个日期之间相差多少天:

select datediff('2027-10-10', '2066-9-1');

1.2.案例演示

<1>.创建一张表,记录生日,

create table tmp( id int primary key auto_increment, birthday date );
insert into tmp (birthday) values(current_date());

<2>.创建一个留言表,

create table msg( id int primary key auto_increment, content varchar(30) not null, sendtime datetime );
insert into msg(content,sendtime) values('hello1', now()); insert into msg(content,sendtime) values('少偶好甜', now());

当我们想要显示所有留言信息,发布日期只显示日期,不用显示具体时间时:

select content,date(sendtime) from msg;

如果是查询在2分钟内发布的帖子,可以如图理解

insert into msg(content,sendtime) values('少偶99', now()); select * from msg where date_add(sendtime, interval 2 minute) > now();

2.字符串函数

2.1.介绍

函数名称描述
charset(str)返回字符串的字符集
concat(string1 [, string2, ...])连接多个字符串
instr(string, substring)返回substringstring中首次出现的位置,未找到返回0
ucase(string)将字符串转换为大写
lcase(string)将字符串转换为小写
left(string, length)从字符串左边截取length个字符
length(string)返回字符串的长度(字节数)
replace(str, search_str, replace_str)将字符串str中的search_str替换为replace_str
strcmp(string1, string2)逐字符比较两个字符串的大小
substring(str, position [, length])strposition位置开始,截取length个字符(省略length时截取到末尾)
ltrim(string)去除字符串左侧空格
rtrim(string)去除字符串右侧空格
trim(string)去除字符串两端空格

2.2.使用实例

注意:此次出现的表是之前已经创建好了的

<1>.获取emp表的ename列的字符集:

select charset(ename) from emp;

<2>.要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”:

select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from exam_result;

<3>.求学生表中学生姓名占用的字节数:

select length(name), name from exam_result;

注意:length函数返回字符串长度,以字节为单位,如果是多字节字符则计算多个字节数; 如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数 (与字符集编码有关)

例如:

<4>.将emp表中所有名字中有S的替换成'上海':

select replace(ename, 's', '上海') ,ename from emp;

<5>.字符串转大小写:

select ucase('ASDddf'); select ucase('aaaddf'); select lcase('ASDFGH'); select lcase('ASsdgsGH');

<6>.截取emp表中ename字段的第二个到第三个字符:

select substring(ename, 2, 2), ename from emp;

<7>.以首字母小写的方式显示所有员工的姓名:

<8>.去除字符串空格:

select ltrim(' sdssf'); select rtrim('sdssf '); select rtrim(' sdssf ');

<8>.逐字符比较两个字符串的大小:

select strcmp('fgdsf','dsdsd');

3.数学函数

1.介绍

函数名称描述
abs(number)返回绝对值
bin(decimal_number)将十进制数转换为二进制
hex(decimal_number)将十进制数转换为十六进制
conv(number, from_base, to_base)在不同进制之间转换
ceiling(number)向上取整
floor(number)向下取整
format(number, decimal_places)格式化数字,并保留指定的小数位数
rand()返回[0.0, 1.0)范围内的随机浮点数
mod(number, denominator)取模,求余数

2.使用案例

<1>.绝对值:

select abs(-1); select abs(-100);

<2>.进制转换

select bin(10); select bin(100);

select hex(16); select hex(160);

select conv(10,10,2); //10进制到二进制的转换 select conv(10,10,3); //10进制到三进制的转换 select conv(10,10,16); //10进制到十六进制的转换

<3>.取整:

select ceiling(23.04); select floor(23.04);

<4>.保留2位小数位数(小数四舍五入):

select format(12.3456, 2); select format(3.1415926, 2); select format(3.1415926, 10);

<5>.产生随机数:

select rand(); select rand();

想要较大的值,直接乘以10的倍数即可:

select rand()*1000;

<6>.取模,求余数:

select mod(10,2); select mod(10,3); select mod(100,5.6);

4.其它函数

<1>.user() 查询当前用户:

select user();

<2>.md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串:

select md5('admin');

<3>.database()显示当前正在使用的数据库:

select database();

<4>.password()函数,MySQL数据库使用该函数对用户加密:

select password('root');

<5>.ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值:

select ifnull('abc', '123'); select ifnull(null, '123');

总结:

本篇我们学习了 MySQL 中常用的内置函数,包括日期函数、字符串函数、数学函数以及其它常用函数。

日期函数主要用于获取和处理日期、时间数据,能够方便地完成时间计算、日期格式化等操作;字符串函数可以对字符串进行拼接、截取、替换、大小写转换等处理;数学函数提供了绝对值、取整、随机数、进制转换等常见数学运算;此外,还学习了user()database()md5()ifnull()等实用函数,在实际开发中能够帮助我们快速完成数据处理和业务逻辑。

熟练掌握这些内置函数,不仅能够简化 SQL 语句,提高开发效率,还能减少应用层代码的编写,使数据处理更加灵活、高效,为后续学习 MySQL 的高级查询、视图、存储过程等内容打下坚实的基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 5:22:26

Python技术变现实战指南:从接单平台到项目交付全流程解析

最近在后台收到不少读者私信&#xff0c;询问如何利用业余时间通过Python技能赚取一些额外收入。恰好我近期也通过几个Python项目获得了一些收益&#xff0c;昨天一个数据处理的小项目就带来了468元的收入。这让我意识到&#xff0c;很多开发者&#xff0c;尤其是学生和刚入行的…

作者头像 李华
网站建设 2026/8/3 5:20:08

Hadoop DataNode启动失败:从日志诊断到权限与ClusterID修复全攻略

1. 问题现象与核心原因剖析当你满怀期待地在终端敲下start-dfs.sh或start-all.sh&#xff0c;看着 NameNode 进程顺利启动&#xff0c;满心以为一个健壮的 HDFS 集群即将就绪时&#xff0c;一盆冷水可能迎面泼来&#xff1a;使用jps命令查看 Java 进程&#xff0c;发现只有 Nam…

作者头像 李华
网站建设 2026/8/3 5:18:34

#DBHOO-LPU在多精度 GEMM 优化技术解析

1. 引言 矩阵乘法&#xff08;GEMM&#xff09;是 LLM 推理中最核心、最耗时的计算单元&#xff0c;占据总计算量的 60-80%。dbhoo-lpu 开源版提供了标准的 F32 精度 GEMM 参考实现&#xff0c;而 DBHOO 商业版在此基础上扩展了从 FP16、BF16 到 INT8、INT4、FP8 的全精度栈支…

作者头像 李华
网站建设 2026/8/3 5:18:01

毫米波雷达静态人体存在检测:原理、集成与场景化调试实战

1. 项目概述&#xff1a;从“动”到“静”的感知革命在智能家居、安防监控和节能控制领域&#xff0c;人体存在检测一直是个核心需求。传统的红外热释电传感器大家都很熟悉了&#xff0c;它能告诉你“有人经过”&#xff0c;但一旦人静止不动&#xff0c;它就“瞎”了。而基于摄…

作者头像 李华
网站建设 2026/8/3 5:16:26

从SSL握手失败到OpenSSL密码套件配置实战指南

1. 从一次“握手失败”的线上事故说起那天下午&#xff0c;监控系统突然报警&#xff0c;提示我们一个面向海外用户的API服务出现了大量连接失败。错误日志里反复出现一个刺眼的短语&#xff1a;SSL_ERROR_NO_CYPHER_OVERLAP。简单来说&#xff0c;就是客户端和服务器在SSL/TLS…

作者头像 李华
网站建设 2026/8/3 5:14:44

可信时间戳技术:数字作品版权保护的即时解决方案

1. 网络作品版权保护的必要性创作一篇网络小说、拍摄一段短视频、设计一张海报&#xff0c;这些数字作品在发布到网络平台的瞬间&#xff0c;就面临着被侵权盗用的风险。去年有位独立摄影师就遇到过这种情况——他拍摄的城市风光照被某商业网站直接盗用&#xff0c;对方甚至抹去…

作者头像 李华