MySQL基础:函数

 

  💎所属专栏:MySQL 

在这里插入图片描述

函数是指一段可以直接被另一段程序调用的程序或代码,在MySQL中也内置了许多函数供开发者去调用,例如之前提到的聚合函数,本节再去介绍一些其他常用的函数

字符串函数

函数功能
CONCAT(S1,S2...Sn)字符串拼接,将S1,S2...Sn拼接成一个字符串
LOWER(str)将字符串str全部转换为小写
UPPER(str)将字符串str全部转换为大写
LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符长度
RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符长度
TRIM(str)去掉字符串头部和尾部的空格
SUBSTRING(str,start,len)返回从字符串str从start起的len个长度的字符串

接下来分别对这些函数进行演示 

-- concat(S1,S2...Sn)字符串拼接,将S1,S2...Sn拼接成一个字符串
select concat('hello','mysql');
-- LOWER(str) 将字符串str全部转换为小写
select lower('Hello');
-- UPPER(str) 将字符串str全部转换为大写
select upper('Hello');
-- LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符长度
select lpad('01',5,'-');
-- RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符长度
select rpad('01',5,'-');
-- TRIM(str) 去掉字符串头部和尾部的空格
select trim(  'hell o' );
-- SUBSTRING(str,start,len) 返回从字符串str从start起的len个长度的字符串
select substring('hello',3,2);

trim()只会去除开头和结尾的空格,字符串中间的空格并不会被去除 

这些函数还可以和 update 操作搭配使用:

update student
set sn = lpad(sn, 6, '0');

数值函数 

函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAND()返回0~1的随机数
ROUND(x,y)求参数x的四舍五入的值,保留y位小数

 向上取整时,只要小数部分不是 0 ,就会向上取整

保留小数位数时,采用的是四舍五入的方法

-- CEIL(x) 向上取整
select ceil(1.1);
-- floor(x) 向下取整
select floor(1.1);
-- MOD(x,y) 返回x/y的模
select mod(3, 5);
-- RAND() 返回0~1的随机数
select rand();
-- ROUND(x,y) 求参数x的四舍五入的值,保留y位小数
select round(2.345,2);

函数与函数之间可以进行嵌套,例如生成一个四位数的随机数就可以这样写

-- 生成一个四位数随机数
select round(rand()*10000,0);

但此时还有一个小问题,如果说生成出来的0~1的数是 0.002这样的数,那么最终结果就不是4位数了,就需要在前面补上0,所以还需要调用lpad()函数

select lpad(round(rand()*10000,0),4,'0');

 日期函数

 

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date,INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1,date 2)返回起始时间date1和结束时间date2之间的天数

 

-- 当前日期
select curdate();
-- 当前时间
select curtime();
-- 当前日期和时间
select now();

 

-- 分别获取year,month,day
select year(now());
select month(now());
select day(now());

 

 接下来看时间间隔相关的函数

-- 添加时间间隔
select date_add(now(), interval 10 day);
-- 求出时间间隔
select datediff('2024-07-01', '2024-08-01');

上面的10 day也可以换成其他的时间单位,例如year,minute等 

datediff() 函数只能计算相差的天数

 

流程函数

流程函数可以在SQL语句中实现条件筛选,从而提高语句的效率

函数功能
IF(value,t,f)如果value为true,就返回 t ,否则返回 f 
IFNULL(value1,value2)如果value1不为空,返回value1,否则返回value2
CASE WHEN[val 1] THEN[res1]...ELSE[default] END如果val1为true,返回res1,否则返回default默认值
CASE[expr] WHEN[val 1] THEN[res1]...ELSE[default] END如果expr的值等于val1,返回res1,否则返回default默认值

 这里判断null是依然和之前一样,"" 这样一个空的字符串并不是null

-- if和ifnull
select if(true, 'ok', 'no');
select ifnull('hello', 'ok');

-- case when then end
select (case name when '许仙' then '民间传说人物' when '白素贞' then '民间传说人物' else '其他' end)
from student;-- null的判断
SELECT (CASE WHEN mail IS NULL THEN '无邮箱' ELSE '有邮箱' END) AS mail_status
FROM student;

这个是加入了expr的值 

select (case '许仙' when '许仙' then '民间传说人物' else '不存在' end);

聚合函数 

函数说明
COUNT([DISTINCT] expr)  返回查询到的数据的数量
SUM([DISTINCT] expr)返回查询到的数据的总和
AVG([DISTINCT] expr)返回查询到的数据的平均值
MAX([DISTINCT] expr)返回查询到的数据的最大值
MIN([DISTINCT] expr)返回查询到的数据的最小值

💎5.1 COUNT() 统计所有行

-- 统计表中的行数
select count(*)
from student;
-- 也可以传入常量 1
select count(1)
from student;

星号(*)并不直接表示表中的任意一列,而是作为一个特殊的指示符,告诉数据库管理系统(DBMS)计算表中的行数,而不关心表中的列内容或是否有NULL值。

还可以指定某一列进行统计:

-- 指定列统计
select count(id)
from student;select count(name)
from student;

💎5.2 SUM() 求和 

创建一张成绩表,计算语文的总成绩

create table exam
(id      bigint primary key auto_increment,name    varchar(20),chinese decimal(5, 2),math    decimal(5, 2)
);
insert into exam(id, name, chinese, math)
values (1, '张三', 98, 95),(2, '李四', 97, 99),(3, '王五', 96, 98),(4, '赵六', 97, 94);
-- 计算语文总成绩
select *
from exam;
select sum(chinese)
from exam;

 查询到的结果存储在了临时表中,不受字段中长度的约束(decimal(5, 2)

如果说求和的那一列存在null的话,会是像之前表达式相加时,null加上任何值都是null的情况吗?

insert into exam values (5,'钱七',96,null);select sum(math)
from exam;

可以看出,最终的值并没有加上null ,并且,如果是非数值类型求和是没有意义的

💎5.3 AVG() 求平均值

-- 求平均值
select avg(math)
from exam;-- 参数里边可以包含表达式,结果可以使用别名
select avg(math + chinese) as 总分平均值
from exam;

 

💎5.4 MAX()和MIN()

求指定列中的最大值和最小值

-- 求最大值和最小值
select max(chinese) as 语文最大值,min(math) as 数学最小值
from exam;

  可以多个聚合函数使用,同时也可以使用别名

在这里插入图片描述

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化编程-七巧低代码入门02

1.1.什么是可视化编程 非可视化编程是一种直接在集成开发环境中(IDE)编写代码的编程方式,这种编程方式要求开发人员具备深入的编程知识,开发效率相对较低,代码维护难度较大,容易出现错误,也需要…

《图解设计模式》笔记(三)生成实例

五、Singleton模式:只有一个实例 Singleton 是指只含有一个元素的集合。因为本模式只能生成一个实例,因此以 Singleton命名。 示例程序类图 Singleton.java public class Singleton {private static Singleton singleton new Singleton();private Si…

[Meachines] [Easy] bounty web.config 文件上传代码注入+内核MS10-092权限提升

信息收集 IP AddressOpening Ports10.10.10.93TCP:80 $ nmap -p- 10.10.10.93 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION │ 80/tcp open http Microsoft IIS httpd 7.5 …

使用Element UI组件时,icon图标不显示

问题描述: 我在使用Element UI组件的日期选择器时,发现图标不显示(左边是原图,右边的问题图)。 经过检查我发现,我的JS,CSS文件都没有问题,只是缺少了element-icons.tff和element-icons.woff这两个文件。 …

Qt 0814作业

一、思维导图 二、登录窗口界面 自由发挥登录窗口的应用场景,实现一个登录窗口界面 要求:每行代码都有注释 【需要用到的图片或者动图,自己去网上找】 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(par…

【OCR 学习笔记】二值化——全局阈值方法

二值化——全局阈值方法 固定阈值方法Otsu算法在OpenCV中的实现固定阈值Otsu算法 图像二值化(Image Binarization)是指将像素点的灰度值设为0或255,使图像呈现明显的黑白效果。二值化一方面减少了数据维度,另一方面通过排除原图中…

微服务架构的介绍

系统架构的演变 随着互联⽹的发展,⽹站应⽤的规模不断扩⼤,常规的应⽤架构已⽆法应对,分布式服务架构以及微服务架构势在必⾏,必需⼀个治理系统确保架构有条不紊的演进。 单体应用架构 Web应⽤程序发展的早期,⼤部分…

C++入门——“继承”

一、引入 面相对象的计算机语言有三大特性:“封装”、“继承”、“多态”。今天来讲解一下C的一大重要特性——继承。 通俗理解来讲,继承就和现实生活一样,子辈继承父辈的一些特性,C中的继承也可以这样理解。它允许我们在保持原有…

计算机毕业设计选什么题目好?springboot 基于Java的学院教学工作量统计系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

vue使用高德获取当前地区天气

1、收件箱 | 高德控制台 (amap.com) 首先打开高德开放平台注册一下 2、创建一个应用获取到key后面获取天气的时候 请求接口的时候会用到key 2.1.1 创建应用的时候注意类型选成天气 2.1.2 创建完成之后就点添加key 然后选择web服务就行 3、可以调取天气接口 天气查询-基础 API…

【鸿蒙学习】HarmonyOS应用开发者基础 - 构建更加丰富的页面(一)

学完时间:2024年8月14日 一、前言叨叨 学习HarmonyOS的第六课,人数又成功的降了500名左右,到了3575人了。 二、ArkWeb 1、概念介绍 ArkWeb是用于应用程序中显示Web页面内容的Web组件,为开发者提供页面加载、页面交互、页面调…

文献检索中JCR与SCIE的区别

一、SCIE Science Citation Index-Expanded(SCI-E,科学引文索引),属于Web of Science中一个子库,是全球著名的科学引文索引数据库,收录了全球自然科学、工程技术、临床医学等领域内170多个学科的9500多种国际性、高影响…

volta引发的血案

什么是volta volta用于做项目级别的node版本控制,当手头上的项目有多个时,且node版本可能还不一样,我们需要不断切换node版本。使用volta可以很好的解决这个问题。只需要安装volta,然后在下面的package.json中配置好node版本即可…

Oracle 用户-表空间-表之间关系常用SQL

问题: 当某一个表数据量特别大,突然插入数据一直失败,可能是表空间不足,需要查看表的使用率 用户-表空间-表之间关系:用户可以有多个表空间,表空间可以有多个表,表只能拥有一个表空间和用户 1.…

跨国企业是否适合使用专线连接国际互联网?

在跨国企业开展国际通信时,需要稳定高效的网络连接来保障业务运作。虽然传统的互联网连接方式较为普遍,但由于带宽有限、网络延迟等问题,跨国企业往往会遇到网速缓慢、连接不稳定等挑战。因此,专线连接逐渐成为跨国企业的一个可行…

如何将MySQL迁移到TiDB,完成无缝业务切换?

当 MySQL 数据库的单表数据量达到了亿级,会发生什么? 这个现象表示公司的业务上了一个台阶,随着数据量的增加,公司规模也进一步扩大了,是非常喜人的一个改变 ,然而随之而来的其他变化,就没那么…

C#实现国产Linux视频录制生成mp4

一. 技术方案 要完成这些功能,具体来说,需要解决如下几个技术问题: (1)麦克风数据采集。 (2)摄像头数据采集。 (3)音频数据编码。 (4)视频数…

低代码与AI:赋能企业数字化转型

引言 随着全球经济的快速发展和科技的飞速进步,数字化转型已成为各个行业和企业发展的重要趋势。数字化转型的背景不仅是提升效率和竞争力的手段,更是适应市场变化、满足客户需求的必由之路。 在当今信息化时代,技术的变革推动了企业运营方式…

嵌入式系统:全面解读与关键要点

嵌入式系统,这个看似专业而遥远的技术词汇,其实早已渗透进了我们日常生活的方方面面。从智能手机到家用电器,再到汽车中的电子控制系统,嵌入式系统无处不在。你是否好奇它们是如何工作的,又有哪些关键点值得我们关注&a…

强大的接口测试可视化工具:Postman Flows

Postman Flows是一种接口测试可视化工具,可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API,数据可视化来显示…