【MySQL】数据库函数通关教程上篇(聚合、数学、字符串、日期、控制流函数)(上)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 文章目录写在前面1 聚合函数1.1 GROUP_CONCAT()1.2 其他聚合函数2 数学函数3 字符串函数4 日期函数4.1 常见日期函数与使用4.2 日期格式5 控制流函数5.1 if逻辑判断语句5.2 case when语句

1 聚合函数


1.1 GROUP_CONCAT()

🆔 简介:

group_concat() 函数首先根据 group by 指定的列进行分组,并且根据分隔符分隔,默认为 ‘,’,将同一个分组的值连接起来,返回一个字符串结果。


🍑 语法格式:


GROUP_CONCAT([DISTINCT] 字段名 
[ORDER BY 排序字段 ASC/DESC] 
[SEPARATOR '分隔符']);
1
2
3

⭕️ 操作示例:


 首先我们需要通过下面的代码创建一个表,而后录入一些数据(随意就行),示例代码及数据表示例如下:

CREATE TABLE emp (
  eid VARCHAR (20) NOT NULL PRIMARY KEY,
  ename VARCHAR (20) NULL,
  age INT NULL,
  dept_id VARCHAR (20) NULL
);


基于此表,简单举例,一段代码对应一个运行结果,供大家理解此函数的作用。

示例 1️⃣ 将所有名字合并成一行,并以爱心分隔

SELECT GROUP_CONCAT(ename SEPARATOR '♥')
FROM emp;


示例 2️⃣ 将所有名字合并成一行,要求根据部门号进行分组,并以年龄总和降序展示

SELECT SUM(age) age_sum, GROUP_CONCAT(ename)
FROM emp
GROUP BY dept_id
ORDER BY age_sum DESC;


1.2 其他聚合函数


聚合函数 作用
count() 统计指定列不为Null的记录行数
sum() 计算指定列的数值和,如果指定列类型不是数值类型,则计算结果为0
max() 计算指定列的最大值,如果指定列是字符串类型,则使用字符串排序运算
min() 计算指定列的最小值,如果指定列是字符串类型,则使用字符串排序运算
avg() 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0


2 数学函数


🍎 常用数学函数一览表:

函数名 说明
ABS( x ) 返回 x 的绝对值
CEIL( x ) 返回大于等于 x 的最小整数
FLOOR( x ) 返回小于等于 x 的最大整数
GREATEST(num1,num2,num3…) 返回列表中最大的数
LEAST(num1,num2,num3…) 返回列表中最小的数
MAX(expression) 返回字段 expression 中的最大值
MIN(expression) 返回字段 expression 中的最小值
MOD(x,y) 返回 x 除以 y 后的余数
PI() 返回圆周率 3.141593
POW(x,y) 返回 x 的 y 次方
RAND() 返回 0 - 1 的随机数
ROUND( x ) 返回距离 x 最近的整数,遵循四舍五入
ROUND(x,y) 返回距离 x 最近的包含 y 位小数的小数,同样遵循四舍五入
TRUNCATE(x,y) 返回距离 x 最近的包含 y 位小数的小数,但是不会四舍五入


🖊 示例代码:

Tips: 答案在代码注释里哦~~~

SELECT ABS(-10);  -- 10
SELECT CEIL(8.8);  -- 9
SELECT CEIL(-8.8);  -- -8
SELECT FLOOR(8.8);  -- 8
SELECT FLOOR(-8.8);  -- -9
SELECT GREATEST(-1,1,2,3,4,5,6);  -- 6
SELECT LEAST(-1,1,2,3,4,5,6);  -- -1
SELECT MOD(2.5, 2);  -- 0.5
SELECT MOD(2.5, -2);  -- 0.5
SELECT MOD(-2.5, 2);  -- -0.5
SELECT MOD(-2.5, -2);  -- -0.5
SELECT ROUND(5.532);  -- 6
SELECT ROUND(5.532, 1);  -- 5.5
SELECT TRUNCATE(6.67, 1);  -- 6.6

3 字符串函数

🐱 常用字符串函数一览表:


函数 说明
LENGTH( s ) 按照字节计算 s 的长度,具体由编码格式决定
CHAR_LENGTH( s ) 返回字符串 s 的字符数
CHARCTER_LENGTH( s ) 返回字符串 s 的字符数
CONCAT(s1,s2 … sn) 将字符串 s1 s2 等多个字符串合并成一个字符串
CONCAT_WS(D,s1,s2 … sn) 合并多个字符串,并以 D 为分隔符
FIELD(s,s1,s2…) 返回第一个字符串在字符串列表(s1,s2…)中的位置
LTRIM( s ) 去除字符串左边的空格
RTRIM( s ) 去除字符串右边的空格
TRIM( s ) 去除字符串两边的空格
MID(s,n,len) 从字符串的 s 的 n 位置截取长度为 len 的字符串
POSITION( s1 IN s) 返回 s1 在 字符串 s 中第一次出现的位置
REPLACE(s,s1,s2) 将字符串 s2 替代 s 中的所有字符串 s1
REVERSE( s ) 反转字符串 s
RIGHT(s,n) 返回字符串后 n 个字符
STARCMP(s1,s2) 比较字符串 s1 s2,如果相等返回0,s1>s2返回1,s1<s2返回-1



示例代码:

Tips: 答案在代码注释里哦~~~

-- 1.按照字节求长度,注意 utf-8 英文 1 字节 汉字 3 字节
SELECT LENGTH('hello');  -- 5
SELECT LENGTH('祢豆子');  -- 9
-- 2.求字符串长度
SELECT CHAR_LENGTH('祢豆子');  -- 3
-- 3.合并字符串
SELECT CONCAT('我','是','祢豆子');  -- 我是祢豆子
SELECT CONCAT_WS('!','我','是','祢豆子');  -- 我!是!祢豆子
-- 4.返回字符串在列表的第一个位置,没有则返回0
SELECT FIELD('Nezuko','大头','小牛马','Nezuko','几何心凉','Nezuko');  -- 3
SELECT FIELD('小鹏','大头','小牛马');  -- 0
-- 5.去除空格
SELECT LTRIM('   Nezuko');  -- Nezuko
SELECT RTRIM('Nezuko   ');  -- Nezuko
SELECT TRIM('   Nezuko   ');  -- Nezuko
-- 6.字符串截取
SELECT MID('我是祢豆子',3,3);  -- 祢豆子
-- 7.获取位置
SELECT POSITION('627' IN 'Nezuko627');  -- 7
-- 8.替换字符
SELECT REPLACE('是你的大头大头','大头','小牛马');  -- 是你的小牛马小牛马
-- 9.反转字符串
SELECT REVERSE('我喜欢你'); -- 你欢喜我
-- 10.返回字符串后几个字符
SELECT RIGHT('Nezuko627',3);  -- 627
-- 11.字符串比较
SELECT STRCMP('abc','abc');  -- 0
SELECT STRCMP('azc','abc');  -- 1
SELECT STRCMP('abcd','abcdzzzzzz');  -- -1

4 日期函数

日期函数相关内容大家了解下即可,需要使用的时候回过头来再查找。

4.1 常见日期函数与使用

🐘 常用日期函数一览表:

函数名称 说明
UNIX_TIMESTAMP() 返回从1970-01-01 00:00:00 到当前的毫秒值
UNIX_TIMESTAMP(DATE_STRING) 将指定日期转化成为时间戳
FROM_UNIXTIME(BIGINT UNIXTIME,STRINGFORMAT) 将毫秒值时间戳转为指定格式日期
CURDATE() 返回当前日期
CURRENT_DATE() 返回当前日期
DATEDIFF(X, Y) 获取日期差值,返回 Y 距离 X 有多少天
TIMEDIFF(X,Y) 获取时间差值,返回 Y 距离 X 有多少秒
DATE_FORMAT(DATE,STRINGFORMAT) 日期格式化
DATE_SUB(DATE,INTERVAL X DAY/MOUTH…) 日期减法
DATE_ADD(DATE,INTERVAL X DAY/MONTH…) 日期加法
EXTRACT(MONTH/DAY/YEAR/HOUR FROM DATE) 从日期中获取月、日等


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
12天前
|
关系型数据库 MySQL 网络安全
|
18天前
|
SQL 数据库连接 API
Perl 教程 之 Perl 数据库连接 7
Perl DBI教程讲解了如何连接数据库,它是与数据库交互的标准接口,提供平台无关的访问。支持事务处理,可通过设置`AutoCommit =&gt; 0`在连接时开始事务或使用`$dbh-&gt;begin_work()`。事务结束后,用`commit`提交或`rollback`回滚。完成工作后,用`$dbh-&gt;disconnect`断开连接。
18 1
|
19天前
|
SQL 数据库连接 API
Perl 教程 之 Perl 数据库连接 4
Perl的DBI模块提供数据库独立接口,用于连接和操作数据库。通过prepare()预处理SQL,execute()执行,finish()释放句柄,及commit()提交事务。
12 1
|
27天前
|
SQL 关系型数据库 MySQL
阿里云MySQL数据库价格、购买、创建账号密码和连接数据库教程
阿里云数据库使用指南:购买MySQL、SQL Server等RDS实例,选择配置和地区,完成支付。创建数据库和账号,设置权限。通过DMS登录数据库,使用账号密码访问。同地域VPC内的ECS需将IP加入白名单以实现内网连接。参考链接提供详细步骤。
367 3
|
17天前
|
弹性计算 关系型数据库 MySQL
阿里云数据库服务器价格表,数据库创建、连接和使用教程
阿里云数据库使用流程包括购买和管理。选择所需数据库类型如MySQL,完成实名认证后购买,配置CPU、内存和存储。确保数据库地域与ECS相同以允许内网连接。创建数据库和账号,设置权限。通过DMS登录数据库,使用账号密码连接。同一VPC内的ECS需添加至白名单以进行内网通信。参考官方文档进行详细操作。
76 3
|
20天前
|
SQL 关系型数据库 数据库连接
Perl 教程 之 Perl 数据库连接 1
Perl教程:使用DBI模块实现数据库连接,DBI是数据库独立接口,适用于Oracle、MySQL等。它定义通用方法,通过API处理SQL,分配给驱动执行。常用变量如$dsn(数据库源),$dbh(数据库句柄),$sth(语句句柄),返回值用$rc和$rv,查询结果存入@ary或(rows)。文件操作用$fh,属性用%\attr。
143 2
|
27天前
|
弹性计算 关系型数据库 MySQL
阿里云MySQL云数据库优惠价格、购买和使用教程分享!
阿里云数据库使用流程包括购买和管理。首先,选购支持MySQL、SQL Server、PostgreSQL等的RDS实例,如选择2核2GB的MySQL,设定地域和可用区。购买后,等待实例创建。接着,创建数据库和账号,设置DB名称、字符集及账号权限。最后,通过DMS登录数据库,填写账号和密码。若ECS在同一地域和VPC内,可内网连接,记得将ECS IP加入白名单。
429 2
|
28天前
|
SQL 关系型数据库 MySQL
阿里云mysql数据库价格购买和使用教程
阿里云数据库使用指南:购买MySQL、SQL Server等RDS实例,通过选择配置、地域和可用区完成购买。创建数据库和账号,分配权限。使用DMS登录数据库,进行管理操作。确保ECS与RDS在同一地域的VPC内,配置白名单实现内网连接。详细步骤见官方文档。
629 1
|
28天前
|
监控 Shell Linux
【Shell 命令集合 磁盘管理 】Linux 检查和创建磁盘配额数据库 quotacheck命令使用教程
【Shell 命令集合 磁盘管理 】Linux 检查和创建磁盘配额数据库 quotacheck命令使用教程
29 0
|
16天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)