函数是指一段可以直接被另一段程序调用的程序或代码,在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;
可以多个聚合函数使用,同时也可以使用别名
文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树SQL高级技巧CTE和递归查询91755 人正在系统学习中
2的n次方_
关注
21
27
10
专栏目录
MySQL基础 - 表达式和函数
宋同学shl
2540
表达式 学过小学数学的我们应该知道,将数字和运算符连接起来的组合称之为表达式,比方说这样: 1 + 1 5 8 我们可以将其中的数字称之为操作数,运算符可以称之为操作符。特殊的,单个操作数也可以被看作是一个特殊的表达式。 在MySQL中也有表达式的概念,不过操作数和操作符的含义有了扩充。下边详细看一下。 操作数 MySQL中操作数可以是下边这几种类型: 常数 常数很好理解,我们平时用到的数字、字符串、时间值什么的都可以被称为常数,它是一个确定的值,比如数字1,字符串'abc',
MYSQL基础:常用函数.docx
08-08
在MySQL中,函数是处理和操作数据的重要工具,可以帮助用户执行各种复杂的计算和转换。以下是关于MySQL常用函数的详细说明: 一、聚合函数 聚合函数对一组数据进行操作并返回单个结果,常用于统计分析。常见的聚合...
10 条评论
熵减玩家
热评
博主的文章不仅增长了我的知识,更激发了我对这一领域的兴趣。感谢博主的无私分享,期待更多精彩内容!
写评论
MySQL七: 聚合函数
开发者
1104
聚合函数(聚集、分组) 作用于一组数据,并对一组数据返回一个值。 一、常用的聚合函数 AVG和SUM函数 可以对数值型数据使用 MIN和MAX函数 可以对任意数据类型使用 SELECT AVG(salary),SUM(salary),MIN(salary),MAX(salary) FROM employees; COUNT函数 可以对任意数据类型使用,返回表中的记录总数 区别:COUNT(),COUNT(1),COUNT(列名) ① 搜索引擎为MyISAM,则三者的执行效率相同 ② 搜索引
MySQL数据库基础:各类窗口函数操作一文详解
master_hunter的博客
2803
窗口函数适用场景:对分组统计结果中的每一条记录进行计算的场景下, 使用窗口函数更好。窗口函数(Window Function)可以像聚合函数一样对一组数据进行分析并返回结果,二者的不同之处在于,窗口函数不是将一组数据汇总成单个结果,而是为每一行数据都返回一个结果。聚合函数和窗口函数的区别如下图所示。窗口函数可以分为静态窗口函数和动态窗口函数,其中,静态窗口函数的窗口大小是固定的,不会因为记录的不同而不同;动态窗口函数的窗口大小会随着记录的不同而变化。
MySQL数据库基础:JSON函数各类操作一文详解
master_hunter的博客
2504
很多日常业务场景都会用到json文件作为数据存储起来,而mysql5.7以上就提供了存储json的支撑。往常存储json一般都保留在pg库或者是hive库里面,现在mysql有了支持的话基本业务都可以用mysql来实现。现在mysql8.x版本对json字符出处理已经做的非常完善了。现在就让我们来详细了解一下关于json数据数据类型mysql都有哪些函数能够对其进行操作。
mysql: 常用函数总结以及高级函数用法
yubin1285570923的博客
4264
rand() 随机 select rand();
Mysql基础:数据库数据文件
03-10
- 函数(FUNCTIONS):MySQL提供了许多内置函数,例如数学函数、字符串函数、日期时间函数等,也可以自定义用户定义的函数来扩展功能。 - 存储过程(PROCEDURE):存储过程是一组预编译的SQL语句,可以接受参数,...
MySQL数据库:存储函数调用.pptx
05-29
数据库编程 存储函数的调用、举例 课程目标 ...调用此存储函数: SELECT author_book(‘计算机应用基础’); 存储函数举例 【例】 创建一个存储函数来删除Sell表中有但Book表中不存在的记录。 DELIMITER
MySQL 基础 - 流程函数.md
07-31MySQL基础 - 流程函数 #### 概述 MySQL是一种广泛使用的开源关系型数据库管理系统,在数据管理和查询方面提供了强大的支持。为了实现更复杂的逻辑控制和条件判断,MySQL内置了一系列流程控制函数,如IF函数、...
MySQL 基础 - 日期函数.md
07-31MySQL 基础 - 日期函数 #### 概述 在进行数据库操作时,日期相关的数据处理是非常常见的需求之一。MySQL 提供了一系列强大的日期函数,可以帮助开发者轻松地完成日期和时间的操作。本文档旨在详细介绍 MySQL ...
MySQL中处理JSON数据:大数据分析的新方向
Chujun123528的博客
1117
灵活性:JSON数据类型允许你在单个列中存储复杂的数据结构,如数组和嵌套对象,这减少了需要创建多个表来存储相关信息的必要性。查询能力:MySQL为JSON数据类型提供了一系列内置的函数,如, , , , , 等,使得查询和修改JSON数据变得非常便捷。索引支持:MySQL支持为JSON文档中的特定路径创建虚拟列(Generated Columns),然后可以在这些虚拟列上创建索引,从而加速基于JSON内容的查询。性能优化:随着MySQL的不断改进,对JSON数据的处理性能也在不断提高。虽然与专门的NoSQL
mysql创建quartz定时任务相关表sql
最新发布
xiexf20230814的博客
238
-存储Cron触发器的cron表达式和其他信息。--接下来,创建索引以提高性能;--存储简单触发器的额外属性。--存储复杂触发器的简单属性。--存储触发器的blob数据。--存储已触发的触发器信息。--存储调度器的状态信息。--存储暂停的触发器组。--存储触发器信息。
MySQL单表条件查询语句
weixin_72431427的博客
292
MySQL中的一些常见的单表条件查询语句。
SpringBoot MySQL BinLog 监听数据变化(多库多表)
掐指一算乀缺钱
414
SpringBoot MySQL BinLog 监听数据变化(多库多表) 库.表,库1.表1,库1.表2
51 无显式主键时 mysql 增加的 DB_ROW_ID
970655147的专栏
373
假设有 implicit_id_table_02, 然后增加了 两条记录, 之后再向 implicit_id_table 中增加记录, 得到的 DB_ROW_ID 为 558。创建表的时候, 创建了该 三个系统字段, DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR。row_id 的处理是通过 dict_sys_get_new_row_id 函数来获取的。为 DB_ROW_ID, DB_TRX_ID, DB_POLLPTR 分配存储空间的地方。
MySQL——单表查询(二)按条件查询(10)带 OR 关键字的多条件查询
PAP
289
MySQL——单表查询(二)按条件查询(10)带 OR 关键字的多条件查询
【MySQL】JDBC的基础使用
Starc的博客
573
JDBC是Java连接和使用数据库的关键技术,它的重复性很高,仍然需要多加练习。源码JDBC的基础使用。
Mysql之视图
2301_77358096的博客
365
创建语法:create [or replace] view 视图名称 as select from where [with check option]查询:show create view 视图名称查看视图数据:select from 视图名称修改:1,可以使用创建的语法更新,记得加or replace2.alter view 视图名称 as select 表名删除:drop view [if exists] 视图名称。
MySQL——单表查询(二)按条件查询(5)带 DISTINCT 关键字的查询
PAP
439
MySQL——单表查询(二)按条件查询(5)带 DISTINCT 关键字的查询
关于我们
招贤纳士
商务合作
寻求报道
400-660-0108
kefu@csdn.net
在线客服
工作时间 8:30-22:00
公安备案号11010502030143
京ICP备19004658号
京网文〔2020〕1039-165号
经营性网站备案信息
北京互联网违法和不良信息举报中心
家长监护
网络110报警服务
中国互联网举报中心
Chrome商店下载
账号管理规范
版权与免责声明
版权申诉
出版物许可证
营业执照
©1999-2024北京创新乐知网络技术有限公司
目录
字符串函数
数值函数
日期函数
流程函数
聚合函数
💎5.1 COUNT() 统计所有行
💎5.2 SUM() 求和
💎5.3 AVG() 求平均值
💎5.4 MAX()和MIN()