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>.获得年月日:

cpp 复制代码
select current_date();

<2>.获得时分秒:

cpp 复制代码
select current_time();

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

cpp 复制代码
select current_timestamp();
cpp 复制代码
select now();

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

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

cpp 复制代码
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>.在日期的基础上减去时间:

cpp 复制代码
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>.计算两个日期之间相差多少天:

cpp 复制代码
select datediff('2027-10-10', '2066-9-1');

1.2.案例演示

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

cpp 复制代码
create table tmp(
id int primary key auto_increment,
birthday date
);
cpp 复制代码
insert into tmp (birthday) values(current_date());

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

cpp 复制代码
create table msg(
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);
cpp 复制代码
insert into msg(content,sendtime) values('hello1', now());

insert into msg(content,sendtime) values('少偶好甜', now());

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

cpp 复制代码
select content,date(sendtime) from msg;

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

cpp 复制代码
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列的字符集:

cpp 复制代码
select charset(ename) from emp;

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

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

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

cpp 复制代码
select length(name), name from exam_result;

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

例如:

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

cpp 复制代码
select replace(ename, 's', '上海') ,ename from emp;

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

cpp 复制代码
select ucase('ASDddf');

select ucase('aaaddf');

select lcase('ASDFGH');

select lcase('ASsdgsGH');

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

cpp 复制代码
select substring(ename, 2, 2), ename from emp;

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

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

cpp 复制代码
select ltrim('  sdssf');

select rtrim('sdssf   ');

select rtrim('    sdssf   ');

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

cpp 复制代码
 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>.绝对值:

cpp 复制代码
select abs(-1);

select abs(-100);

<2>.进制转换

cpp 复制代码
select bin(10);

select bin(100);
cpp 复制代码
select hex(16);

select hex(160);
cpp 复制代码
select conv(10,10,2);            //10进制到二进制的转换

select conv(10,10,3);            //10进制到三进制的转换

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

<3>.取整:

cpp 复制代码
select ceiling(23.04);

select floor(23.04);

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

cpp 复制代码
select format(12.3456, 2);

select format(3.1415926, 2);

select format(3.1415926, 10);

<5>.产生随机数:

cpp 复制代码
 select rand();

 select rand();

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

cpp 复制代码
select rand()*1000;

<6>.取模,求余数:

cpp 复制代码
select mod(10,2);

select mod(10,3);

select mod(100,5.6);

4.其它函数

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

cpp 复制代码
select user();

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

cpp 复制代码
select md5('admin');

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

cpp 复制代码
 select database();

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

cpp 复制代码
 select password('root');

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

cpp 复制代码
select ifnull('abc', '123');

select ifnull(null, '123');

总结:

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

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

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

相关推荐
wWYy.3 小时前
Mysql:一行数据是怎么存储的?
android·数据库·mysql
一米阳光866110 小时前
软考(中级)软件设计师核心笔记(3)数据库系统——概念、数据库设计
数据库·笔记·职场发展·软考·软件设计师
奈斯先生Vector10 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
建筑工程企业管理系统12 小时前
erp工程项目管理系统落地价值:实现工程多项目成本精细化核算与管控
大数据·数据库·人工智能
AI大模型-小华12 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
foolishlee13 小时前
Neon wal日志处理流程2
数据库
2601_9657984714 小时前
Is Hygia Good for Maid & Janitorial Sites? Technical Audit
服务器·网络·数据库
Cloud云卷云舒14 小时前
海山数据库(HaishanDB)面向工业云场景技术方案
数据库·haishandb·工业云·移动云海山数据库·天工云
逃逸线LOF14 小时前
Spring配置数据源{连接池}(Druid、c3p0)
java·数据库·spring