MySQL常用函数整理,建议收藏!

常见函数

  • 字符串函数
  • 数字函数
  • 日期函数
  • 聚合函数
  • 流程控制函数

一、字符串函数

concat(s1,s2...,sn) 
--将s1,s2...,sn连接成字符串,如果该函数中的任何参数为 null,返回结果为 null
concat_ws(sep,s1,s2...,sn)
--将s1,s2...,sn连接成字符串,并用sep字符间隔
substr(str,start,len)   
--从start位置开始截取字符串,len表示要截取的长度;
lcase(str)或lower(str)                  
--将字符串str转换为小写形式
upper(str)和ucase(str)
--将字符串转换为大写形式  
length(s)         --返回字符串str中的字符数                 
trim(str)         --去除字符串首部和尾部的所有空格                                                
left(str,x)       --返回字符串str中最左边的x个字符
right(str,x)      --返回字符串str中最右边的x个字符
strcmp(s1,s2)     --比较字符串s1和s2是否相同 相同返回0,否则-1

下面对个别举例

1、concat函数

select concat('mysql', 'mongodb', 'es') as str;
+----------------+
| str            |
+----------------+
| mysqlmongodbes |
+----------------+

如果该函数中的任何参数为 null,返回结果为 null

select concat('mysql', null, 'es') as str;
+------+
| str  |
+------+
| null |
+------+

2、concat_ws函数

elect concat_ws('-', 'mysql', 'mongodb', 'es') as str1;
+------------------+
| str1             |
+------------------+
| mysql-mongodb-es |
+------------------+

如果该函数中的存在参数为 null,则会过滤null

select concat_ws('-', 'mysql', null, 'es') as str1;
+----------+
| str1     |
+----------+
| mysql-es |
+----------+

3、substr函数

没有指定len长度:表示从start开始起,截取到字符串末尾。

select substr('今天天气真不错',3) as str;
+---------+
| str     |
+---------+
|天气真不错 |
+---------+

指定了len长度:表示从start开始起,截取len个长度。

select substr('今天天气真不错',3,2) as str;
+------+
| str  |
+------+
| 天气  |
+------+

4、trim函数

select trim('  今天杭州天气40度  ') as str1;
+--------------+
| str1         |
+--------------+
|今天杭州天气40度|
+--------------+

默认是空格,我们可以指定子串

select trim('-' from '---今天杭州天气40度---') as str1;
+--------------+
| str1         |
+--------------+
|今天杭州天气40度|
+--------------+

二、数字函数

round(x,y)      --四舍五入,y表示保留小数位(y非必填)
ceil(x)         --向上取整,返回>=该参数的最小整数。
floor(x)        --向下取整,返回<=该参数的最大整数。          
mod(x,y)        --返回x/y的模(余数)
greatest(x1,x2,...,xn)--返回集合中最大的值
least(x1,x2,...,xn)   --返回集合中最小的值
rand()          --返回0到1内的随机值,可以通过提供一个参数(种子)使rand()随机数生成器生成一个指定的值。
truncate(x,y)   --返回数字x截短为y位小数的结果

示例

1、round函数

round(x);四舍五入

round(x,y)对x进行保留y位

select round(3.47), round(3.47,1);
+-------------+---------------+
| round(3.47) | round(3.47,1) |
+-------------+---------------+
|           3 |           3.5 |
+-------------+---------------+

三、日期函数

在讲时间之前我们先来理解下 一些基本概念

(图2)

now()             --返回当前的日期和时间
curdate()或current_date() --返回当前的日期
curtime()或current_time() --返回当前的时间
year(date)    --获取年份
month(date)   --获取月份
day(date)     --获取日
hour(date)    --获取小时
minute(date)  --获取分钟
second(date)  --获取秒数 
str_to_date(str,format)   --将日期格式的字符串,转换成指定格式的日期
date_format(date,format) --将日期转换为对应的字符串格式                        
date_add(date,interval expr unit)--增加日期时间
date_sub(date,interval expr unit)--减少日期时间
dayofweek(date)   --返回date所代表的一星期中的第几天(1~7)
dayofmonth(date)  --返回date是一个月的第几天(1~31)
dayofyear(date)   --返回date是一年的第几天(1~366)
quarter(date)     --返回date在一年中的季度(1~4)
unix_timestamp(date)  --将当前时间转为时间戳 如:select unix_timestamp(now()) 
from_unixtime(tr) --将时间戳转为时间 如:select from_unixtime(unix_timestamp());
select period_diff(200302,199802);--返回两个日期值之间的差值(月数) 

示例

1、str_to_date(str,format)

srt:要格式化为日期的字符串(输入字符串)

format:要使用的格式字符串

如果不能按照format解析str,str_to_date函数将返回null

-- 2017-01-06 10:20:30
select str_to_date('2017-01-06 10:20:30','%Y-%m-%d %H:%i:%s');
-- 2022-07-06
select str_to_date('2022-07-06 10:20:30','%Y-%m-%d');
-- 2022-05-25
select str_to_date('25,5,2022','%d,%m,%Y');
-- 2022-05-25 11:30:00
select str_to_date('20220525 1130','%Y%m%d %h%i');
-- 2022-05-27 10:40:10
select str_to_date('2022,5,27 10,40,10', '%Y,%m,%d %h,%i,%s');
-- 2022-05-25
select str_to_date('25,5,2022 extra characters','%d,%m,%Y');

2、date_format(date,format)

使用场景:开始结束时间的查询条件,根据年月日星期分组的查询

SELECTid,DATE_FORMAT(create_time, '%Y-%c-%d')
FROM order
WHERE DATE_FORMAT(create_time, '%Y-%m-%d') >= '2022-07-15';

使用场景:计算年龄

-- 计算年龄方式一
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(Birthday, '%Y') as age from employee
--计算年龄方式二
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(create_time)),'%Y')+0 AS age FROM employee;

3、date_add(date,interval expr unit)

作用: 增加日期时间

应用场景:当前时间的前一天,前几分钟。 常用于数据统计。
例子:

select date_add(now(),interval 1 day) as day;
+---------------------+
| day                 |
+---------------------+
| 2022-07-16 02:23:15 |
+---------------------+

其中 Date 表示日期格式,其中就包括: 如 2017-12-27,now() 等格式。

expr:表示数量。

unit:表示单位,支持毫秒(microsecond),秒(second),小时(hour),天(day),周(week),月(month),年(year)等。

四、聚合函数

avg(x)           --返回指定列的平均值
count(x)         --返回指定列中非null值的个数
min(x)           --返回指定列的最小值
max(x)           --返回指定列的最大值
sum(x)           --返回指定列的所有值之和
group_concat(x)  --返回由属于一组的列值连接组合而成的结果,非常有用

group_concat(x)

group_concat函数在开发中确实很有用,group_concat需要和group by联合使用,用于将某一列的值按指定的分隔符进行拼接,mysql默认的分隔符是逗号。

示例一

对一张表使用group_concat函数

-- 1、好比这有个部门表,我想看下每个部门一共有多少人,我们可以这样写。
select dept, count(*) from employee group by dept;
+-------+----------+
| dept  | count(*) |
+-------+----------+
| 部门a |        5 |
| 部门c |        3 |
| 部门b |        5 |
+-------+----------+--2、如果我们想看下每个部门的具体人名,我们就可以用group_concat函数
select dept,group_concat(name) from employee group by dept;
+-------+------------------------------+
| dept  | group_concat(name)           |
+-------+------------------------------+
| 部门a | 小王,小王,小高,小高,小秦 |
| 部门b | 小红,小红,小红,小秦,小马 |
| 部门c | 小马,小朱,小朱
————————————————-- 3、我们还可以对人名排序
select dept,group_concat(name order by name desc) from employee group by dept;-- 4、我们还可以对人名进行去重
select dept,group_concat(distinct name) from employee group by dept;
+-------+------------------------------+
| dept  | group_concat(name)           |
+-------+------------------------------+
| 部门a | 小王,小高,小秦 |
| 部门b | 小红,小秦,小马 |
| 部门c | 小马,小朱
————————————————

示例2

对两张及以上表使用group_concat函数

--一张文章表,一张文章关联标签表,它们是一对多的关系,现在我想一次性查出该文章下所有标签信息
select se.id, se.article_title, group_concat(ca.name) as tagnames
from article seleft join article_tag ca on se.`id` = ca.`article_id`
group by se.id+-------+------------------------------+
| id  | article_title  | tagnames      |
+-------+------------------------------+
| 1 | 杰森斯坦森蜕变!   |好莱坞,八卦,娱乐  |
| 2 | 郭德纲助理被开除! |德云社,郭德纲,相声|
————————————————

五、流程控制图

1、if函数

语法

if(test,t,f)   --如果test是真,返回t;否则返回f

示例

select name,age,if(age>60,'老年','不老')  as remark from user+------+------+--------+
| name | age  | remark |
+------+------+--------+
| 张三  |   10 | 不老  |
| 李四  |   69 | 老年  |
| 王五  |   72 | 老年  |
| 赵六  |   30 | 不老  |
+------+------+--------+
2、ifnull函数

判断值是否为null,是null用指定值填充;

语法

ifnull(arg1,arg2)   --如果arg1不是空,返回arg1,否则返回arg2
nullif(arg1,arg2)   --如果arg1=arg2返回null;否则返回arg1

示例

select ifnull(1,2) r1, ifnull(null,5) r2, ifnull(2*null,'false') r3;
+----+----+-------+
| r1 | r2 | r3    |
+----+----+-------+
|  1 | 5 | false |
+----+----+-------+select nullif(1,1) as r1,nullif('a','b') as r2,nullif(2+3,4+1) as r2;
+------+------+------+
| r1   | r2   | r2   |
+------+------+------+
| null | a    | null |
+------+------+------+
3、case...when函数

case when 有两种写法:

  1. 搜索case when,好处是每一次假设都可以指定不同的列

其实只会这一种方式就可以,下面是不同写法而已,功能都能实现

case 
when <求值表达式> then <表达式1>
when <求值表达式> then <表达式2>
else <表达式>
end

<求值表达式> :一般为字段 【=、>、<、in、等】如 字段 = "1"

<表达式1> : 一般为字段或者字符串或者数值等。

2)简单case表达式

case <表达式>
when <表达式> then <表达式>
when <表达式> then <表达式>
else <表达式>
end

注意

  • else 可以不写,默认返回null
  • end 不可以忘记
  • 当一个case子句中有多个判断逻辑时、字段类型需要一致
  • 当一个case子句中有多个判断逻辑时、第一个为真的结果会被输出

这里举个完整的示例,我们先看原始数据

需求一:统计下每个人的分数在什么阶段。

select id,name,score, 
casewhen  score>=90 then '优秀' when  score>=80 and score <90 then '良好'when  score>=60 and score<80 then '合格'when  score<60 then '不合格'
end as '阶段' from t_score;

运行结果

需求2:统计优秀、良好、合格、不合格人数。

select  
casewhen  score>=90 then '优秀' when  score>=80 and score <90 then '良好'when  score>=60 and score<80 then '合格'when  score<60 then '不合格'
end as '阶段',count(*) as '人数' from t_score group by casewhen  score>=90 then '优秀' when  score>=80 and score <90 then '良好'when  score>=60 and score<80 then '合格'when  score<60 then '不合格'
end;-- 上面sql我们也可以使用别名
select  
casewhen  score>=90 then '优秀' when  score>=80 and score <90 then '良好'when  score>=60 and score<80 then '合格'when  score<60 then '不合格'
end as type,count(*) as '人数' from t_score group by type;

运行结果

需求3:不使用group by 的聚合来统计优秀、良好、合格、不合格人数。

需求2返回的是4条数据,如果我们想变成一条数据,这样是不是更加方便。

select  
sum(case when  score>=90 then 1 else 0 end ) as '优秀' ,
sum(case when  score>=80 and score <90  then 1 else 0 end ) as '良好' ,
sum(case when  score>=60 and score<80 then 1 else 0 end ) as '合格' ,
sum(case when  score<60 then 1 else 0 end ) as '不合格' 
from t_score;

运行结果

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

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

相关文章

xilinx的高速接口构成原理和连接结构

本文来源&#xff1a; V3学院 尤老师的培训班笔记【高速收发器】xilinx高速收发器学习记录Xilinx-7Series-FPGA高速收发器使用学习—概述与参考时钟GT Transceiver的总体架构梳理 文章目录 一、概述&#xff1a;二、高速收发器结构&#xff1a;2.1 QUAD2.1.1 时钟2.1.2 CHANNEL…

【阅读论文】When Large Language Models Meet Vector Databases: A Survey

摘要 本调查探讨了大型语言模型&#xff08;LLM&#xff09;和向量数据库&#xff08;VecDB&#xff09;之间的协同潜力&#xff0c;这是一个新兴但迅速发展的研究领域。随着LLM的广泛应用&#xff0c;出现了许多挑战&#xff0c;包括产生虚构内容、知识过时、商业应用成本高昂…

【Godot4.2】基础知识 - Godot中的2D向量

概述 在Godot中&#xff0c;乃至一切游戏编程中&#xff0c;你应该都躲不开向量。这是每一个初学者都应该知道和掌握的内容&#xff0c;否则你将很难理解和实现某些其实原理非常简单的东西。 估计很多刚入坑Godot的小伙伴和我一样&#xff0c;不一定是计算机专业或编程相关专…

利用sealos安装k8s集群

1. 环境准备 准备三台干净&#xff08;未安装过k8s环境&#xff09;的虚拟机 # 所有的主机都要配置主机名和域名映射 # 设置主机名 hostnamectl set-hostname k8s-master01 # vim /etc/hosts 192.168.59.201 k8s-master01 192.168.59.202 k8s-worker01 192.168.59.203 k8…

基于ssm停车场管理系统(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、项目概述…

腾讯云GPU云服务器_并行计算_弹性计算_AI_深度学习

腾讯云GPU服务器是提供GPU算力的弹性计算服务&#xff0c;腾讯云GPU服务器具有超强的并行计算能力&#xff0c;可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景&#xff0c;腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

java数据结构与算法基础-----字符串------正则表达式的练习案例---持续补充中

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 正则表达式基础&#xff1a;https://blog.csdn.net/grd_java/article/det…

xercesc库中文保存XML功能实现

目录 一 参考链接 二 运行结果 三 代码 一 参考链接 DOM Programming Guide (apache.org) Xerces-c DOM XML文件的构造_xerces-c domimplementation-CSDN博客 Xerces-c库的使用-CSDN博客 二 运行结果 三 代码 #if 1//参考链接&#xff1a; https://blog.csdn.net/RGBMa…

2020年黑龙江省水稻种植分布数据

黑龙江省&#xff0c;位于中国最东北部&#xff0c;是我国位置最北、最东&#xff0c;纬度最高&#xff0c;经度最东的省份&#xff0c;气候为温带大陆性季风气候。黑龙江省土地总面积为47.3万平方公里&#xff08;含加格达奇和松岭区&#xff09;&#xff0c;占全国土地总面积…

HTML元素语义化补充之css函数(三)

文章目录 CSS中的函数css函数–varcss函数–calccss函数–blurcss函数–gradientlinear-gradient的使用 CSS中的函数 ◼ 在前面我们有使用过很多个CSS函数: 比如rgb/rgba/translate/rotate/scale等; CSS函数通常可以帮助我们更加灵活的来编写样式的值&#xff1b; ◼ 下面有几…

Nature:“量子龙卷风”首次模拟黑洞

科学家们在超流体氦气中首次创造出了一个巨大的“量子漩涡”&#xff08;quantum vortex&#xff09;&#xff0c;用以模拟黑洞。这一成就不仅使他们能够更加细致地观察模拟黑洞的行为&#xff0c;还能探究其与周围环境的交互作用。 诺丁汉大学的研究团队与伦敦国王学院和纽卡斯…

春天到了,颈椎病容易复发和加重,怎么回事?

即将进入四月&#xff0c;气温回暖&#xff0c;大家的着装明显轻便了。实际上&#xff0c;四时之气均有诱发颈椎病复发的因素&#xff0c;春天也不例外。 对于颈椎病人群来说&#xff0c;他们的颈部状态较差&#xff0c;遇到“无孔不入”、挟裹着湿气的风邪&#xff0c;便十分容…

操作系统原理-模拟进程创建、终止、阻塞、唤醒原语——沐雨先生

一、实验题目&#xff1a; 模拟进程创建、终止、阻塞、唤醒原语 二、实验目的&#xff1a; 通过设计并调试创建、终止、阻塞、唤醒原语功能&#xff0c;有助于对操作系统中进程控制功能的理解&#xff0c;掌握操作系统模块的设计方法和工作原理。 三、实验环境&#xff1a; …

【算法分析与设计】翻转二叉树

题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,1]示例…

本地运行环境工具UPUPWANK(win)和Navicat数据库管理工具

UPUPWANK安装地址&#xff1a;https://www.upupw.net 1.进入UPUPWANK后点击一键开启 2.新增项目 这里请千万注意80端口&#xff0c;如果80端口被占用了&#xff0c;请记住去任务管理器关闭占用80端口的进程。不然就不会成功显示。&#xff08;笔者含泪警告&#xff0c;一晚上的…

Spring中的OAuth2

一. 什么是OAuth2 “Auth” 表示 “授权” Authorization “O” 是 Open 的简称&#xff0c;表示 “开放” 连在一起就表示 “开放授权”&#xff0c;OAuth2是一种开放授权协议。 二. OAuth2是什么 怎么用 OAuth2是目前最流行的授权协议&#xff0c;用来授权第三方应用&am…

信号的小波包能量谱计算(以轴承振动信号为例,Python环境)

小波分析是近30年来发展起来的数学分支&#xff0c;是Fourier分析划时代发展的结果&#xff0c;由法国工程师Morlet首先提出&#xff0c;后广泛应用于信号处理、图像处理与分析、地震勘探、故障诊断、自动控制等领域&#xff0c;小波就是小的波形&#xff0c;所谓“小”是指它具…

QT文件读写操作和内容提取

访问IO设备&#xff0c;需要先调用open()来设置正确的OpenMode(例如ReadOnly或ReadWrite) 打开设备后后&#xff0c;使用write() 或putChar() 写入数据到文件和设备&#xff0c;并通过调用read()&#xff0c;readLine() 或readAll() 进行读取&#xff1b;使用完设备后&#xf…

3、Jenkins持续集成-Jenkins安装和插件管理

文章目录 一、Jenkins安装1. 安装JDK2. 获取jenkins安装包3. 安装包上传到服务器&#xff0c;进行安装4. 修改Jenkins配置&#xff08;1&#xff09;低版本Jenkins的rpm包&#xff08;2&#xff09;高版本Jenkins的rpm包 5. 启动Jenkins6. 打开浏览器访问7. 获取并输入admin账户…

【漏洞复现】netgear路由器 boarddataww 存在RCE漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…