MySQL:函数

基本介绍

        在MySQL中,为了提高代码重用性和隐藏实现细节,MySQL提供了很多函数。函数可以理解为别人封装好的模板代码。

        在MySQL中,函数非常多,主要可以分为五类:聚合函数、数学函数、字符串函数、日期函数、控制流函数、窗口函数(MsSQL8.0版本及以上才有)

聚合函数

        在MySQL中,聚合函数主要由: count,sum,min,max,avg,group_ concat() 。

        这里主要讲group_ concat(),该函数用来用户实现行的合并

group_ concat()

        group_ concat()函数首先根据group by指定的列进行分组,并且用分隔符分隔,将同一个分组中的值连接起来,返回一一个字符串结果。

格式:

数学函数

函数名描述
ABS(x)返回x的绝对值
CEIL(x)返回大于或等于x的最小整数
FLOOR(x)返回小于或等于x的最大整数
GREATEST(expr1, expr2, expr3, ...)返回列表中的最大值
LEAST(expr1, expr2, expr3, ...返回列表中的最小值
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位的值(与ROUND最大的区别是不会进行四舍五入)

字符串函数

函数名描述
LENGTH(s)返回字符串s的字节数
CHAR_ LENGTH(s)返回字符串s的字符数
CHARACTER_ LENGTH(s)返回字符串s的字符数
CONCAT(s1,s2...sn)字符串s1,s2等多个字符串合并为一个字符串
CONCAT_WS(x, s1,2...sn)同CONCAT(51,2...)函数,但是每个字符串之间要加上x,x可以是分隔符
FlELD(s,s1,2...)返回第一个字符串s在字符串列表(s1,s2,...)中的位置
LTRIM(s)去掉字符串s开始处的空格
RTRIM(s)去掉字符串s后边的空格
TRIM(s)去掉字符串s两边的空格
MID(s,n,len)从字符串s的n位置截取长度为len的子字符串,同SUBSTRING(s,n,len)
POSITION(s1 IN s)从字符串s中获取s1的开始位置
REPLACE(s,s1,s2)将字符串s2替代字符串S中的字符串s1
REVERSE(s)将字符串s的顺序反过来
RIGHT(s,n)返回字符串s的后n个字符
STRCMP(s1,s2)比较字符串s1和s2,如果s1与s2相等返回0,如果s1>s2返回1,如果s1<s2返回-1
SUBSTR(s, start, length)从字符串s的start位置截取长度为length的子字符串
SUBSTRING(s, start, length)从字符串s的start位置截取长度为length的子字符串
UCASE(s)将字符串转换为大写
UPPER(s)将字符串转换为大写
LCASE(s)将字符串s的所有字母变成小写字母
LOWER(s)将字符串S的所有字母变成小写字母

日期函数

函数

函数名描述
UNIX_TIMESTAMP()返回从1970-01-01 00:00:00到当前毫秒值
UNIX_TIMESTAMP(DATE_STRING)将制定日期转为毫秒值时间戳
FROM_ UNIXTIME(BIGINT UNIXTIME[ STRINGFORMAT])将毫秒值时间戳转为指定格式日期
CURDATE()返回当前日期(年月日)
CURRENT_DATE()返回当前日期(年月日)
CURRENT_TIME返回当前时间(时分秒)
CURTIME()返回当前时间(时分秒)
CURRENT_ TIMESTAMP()返回当前日期和时间
DATE()从日期或日期时间表达式中提取日期值
DATEDIFF(d1,d2)计算日期d1->d2之间相隔的天数
TIMEDIFF(time1, time2)计算时间差值(秒)
DATE_FORMAT(d,f)按表达式f的要求显示日期d
STR_TO_DATE(string, format mask)将字符串转变为日期
DATE_SUB(date,INTERVAL expr type)函数从日期减去或加上指定的时间间隔。type 值可以是:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、DAY_MINUTE、DAY_HOUR、YEAR_MONTH、SECOND_MICROSECOND、MINUTE_ MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH
 
ADDDATE/DATE ADD/DATE_ADD(date,INTERVAL expr type)
EXTRACT(type FROM d)从日期d中获取指定的值,type 指定返回的值。type 可取值为:MICROSECOND...
LAST_DAY(d)返回给给定日期的那一月份的最后一天
MAKEDATE(year, day- of-year)基于给定参数年份year和所在年中的天数序号day-of-year 返回一个日期
YEAR(d)返回年份
MONTH(d)返回日期d中的月份值,1到12
DAY(d)返回日期值d的日期部分
HOUR(t)返回t中的小时值
MINUTE(t)返回t中的分钟值
SECOND(t)返回t中的秒钟值
QUARTER(d)返回日期d是第几季节,返回1到4
MONTHNAME(d)返回日期当中的月份名称,如November
MONTH(d)返回日期d中的月份值,1 到12
DAYNAME(d)返回日期d是星期几,如Monday, Tuesday
DAYOFMONTH(d)计算日期d是本月的第几天
DAYOFWEEK(d)日期d今天是星期几,1星期日,2星期一,以此类推
DAYOFYEAR(d)计算日期d是本年的第几天
WEEK(d)计算日期d是本年的第几个星期,范围是0到53
WEEKDAY(d)日期d是星期几,0表示星期一,1表示星期二
WEEKOFYEAR(d)计算日期d是本年的第几个星期,范围是0到53 
YEARWEEK(date, mode)返回年份及第几周(0到53) ,mode 中0表示周天,1表示周一,以此类推
NOW()返回当前日期和时间

日期格式

日期格式
格式描述
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时(00-23)
%h小时(01-12)
%I小时(01-12)
%i分钟,数值(00-59)
%j年的天(001-366)
%k小时(0-23)
%l小时(1-12)
%M月名
%m月,数值(00-12)
%pAM或PM
%r时间,12-小时(hh:mm:ss AM或PM)
%S秒(00-59)
%s秒(00-59)
%T时间,24-小时(hh:mn:ss)
%U周(00-53)星期日是一周的第一天
%u周(00-53)星期一是一周的第一天
%V周(01-53)星期日是一周的第一天, 与%X使用
%v周(01-53) 星期一是一周的第一天,与%X使用
%W星期名
%w周的天(0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4位,与%V使用
%x年,其中的星期一是周的第一天,4位,与%V使用
%Y年,4位
%y年,2位

控制流函数

if逻辑判断函数

格式解释
IF(expr,v1,v2)如果表达式expr成立,返回结果v1;否则,返回结果v2。
IFNULL(v1,v2)如果v1的值不为NULL,则返回v1,否则返回v2。
ISNULL(expression)判断表达式是否为NULL
NULLIF(expr1, expr2)比较两个字符串,如果字符串expr1与expr2相等返回NULL,否则返回expr1

CASE_WHEN语句

CASE表示函数开始,END 表示函数结束。如果condition1成立,则返回result1,如果condition2成立,则返回result2,当全部不成立则返回result,而当有一个成立之后,后面的就不执行了。

CASE expression
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    -- ...
    WHEN conditionN THEN resultN
    ELSE result
END

窗口函数

介绍

        MySQL 8.0新增窗口函数,窗口函数又被称为开窗函数,与Oracle 窗口函数类似,属于MySQL的一大特点。非聚合窗口函数是相对于聚函数来说的。聚合函数是对一组数据计算后返回单个值(即分组),非聚合函数一次只会处理一行数据。窗口聚合函数在行记录上计算某个字段的结果时,可将窗口范围内的数据输入到聚合函数中,并不改变行数。

分类

另外还有开窗聚合函数: SUM,AVG,MIN,MAX

语法结构

        其中,window_function 是窗口函数的名称; expr 是参数,有些函数不需要参数; OVER子句包含三个选项:

        1.分区(PARTITION BY)

        PARTITION BY选项用于将数据行拆分成多个分区(组),它的作用类似于GROUP BY分组。如果省略了PARTITION BY,所有的数据作为一个组进行计算

        2.排序(ORDER BY)

        OVER子句中的ORDER BY选项用于指定分区内的排序方式,与ORDER BY子句的作用类似

        3.窗口大小(frame_clause) 

        frame_clause选项用于在当前分区内指定一个计算窗口,也就是一个与当前行相关的数据子集。

序号函数

        序号函数有三个:ROW_NUMBER()、 RANK()、 DENSE_RANK(), 可以用来实现分组排序,并添加序号。

格式

开窗聚合函数

概念

        在窗口中每条记录动态地应用聚合函数(SUM()、 AVG()、 MAX()、 MIN()、 COUNT()) ,可以动态计算在指定的窗口内的各种聚合函数值。

案例

 order by ... 后还可以加关键字rows

        rows between unbounded preceding and current row     --从首行加到当前行(默认就是这样)

        rows between n preceding and current row  --从前n行加到当前行(是n+1项的和,没有不加)

        rows between n preceding and k following  --从前n行加到后k行(包括当前行)

分布函数

CUME_DIST函数

介绍  

        用途:分组内小于、等于当前rank值的行数/分组内总行数

        应用场景:查询小于等于当前薪资(salary) 的比例

案例

PERCENT_RANK函数

介绍 

        用途:每行按照公式(rank-1) / (rows 1)进行计算。其中,rank为RANK()函数产生的序号,rows为当前窗口的记录总行数

        应用场景:不常用

案例

前后函数

介绍

        分类:LAG、LEAD

        用途:返回位于当前行的前n行(LAG(expr,n)) 或后n行(LEAD(expr,n)) 的expr的值

        应用场景:查询前1名同学的成绩和当前同学成绩的差值

案例

头尾函数

介绍

        分类: FIRST_VALUE、LAST_VALUE

        用途:返回第一个(FIRST_VALUE(expr))或最后一个(LAST_VALUE(expr)) expr的值

        应用场景:截止到当前,按照日期排序查询第1个入职和最后1个入职员工的薪资

案例

        注意:如果不指 定ORDER BY,则进行排序混乱,会出现错误的结果

其它函数

NTH_ VALUE(expr, n)

介绍 

        用途:返回窗口中第n个expr的值。expr可以是表达式,也可以是列名

        应用场景:截止到当前薪资,显示每个员工的薪资中排名第2或者第3的薪资

案例

 NTILE(n)

介绍

        用途:将分区中的有序数据分为n个等级,记录等级数

        应用场景:将每个部门员工按照入职日期分成3组

案例

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven讲解

介绍 Maven是一个流行的构建工具和项目管理工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目报告生成。Maven通过提供一致的项目结构、自动化的构建过程和强大的依赖管理&#xff0c;简化了项目的开发和维护过程。 下面是一些Maven的主要特点和用途&#xff1a; 项…

【算法】Knuth-Morris-Pratt 算法(KMP算法):一种在字符串中查找子串的算法

引言 KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一个在字符串中查找子串的算法&#xff0c;由 Donald Knuth、Vaughan Pratt 和 James H. Morris 共同发明。这个算法的特点是在查找过程中&#xff0c;不会回溯主串&#xff0c;也不会重复扫描已经比较过的子串&…

2024年上海高考数学最后四个多月的备考攻略,目标140+

亲爱的同学们&#xff0c;寒假已经来临&#xff0c;春节即将到来&#xff0c;距离2024年上海高考已经余额不足5个月了。作为让许多学子头疼&#xff0c;也是拉分大户的数学科目&#xff0c;你准备好了吗&#xff1f;今天&#xff0c;六分成长为您分享上海高考数学最后四个多月的…

2024 高级前端面试题之 JS 「精选篇」

该内容主要整理关于 JS 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 JS模块精选篇 1. 数据类型基础1.1 JS内置类型1.2 null和undefined区别1.3 null是对象吗&#xff1f;为什么&#xff1f;1.4 1.toString()为什么可以调用&#xff1…

燃烧的指针(三)

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;c语言从基础到进阶 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于c语言的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到小田代码世界~ &#x…

为什么需要使用线程池来创建线程?

当我们使用new Thread无限创建线程的时候 因为频繁的创建线程和销毁线程&#xff0c;cpu利用率会非常高 当cpu利用率达到100%的时候 那么没有可用的资源 让其他进程使用 那么其他进程访问就会导致卡顿 访问速度变慢 当我们使用线程池的时候 &#xff0c;cpu利用率就会降低&…

市场复盘总结 20240126

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 昨日主题投资 连板进级率 27/105 25.7% 二进三&#xff1a; 进级率低 50% 最常用的二种方法&#xff1a; 方…

2024最新版Visual Studio Code安装使用指南

2024最新版Visual Studio Code安装使用指南 Installation and Usage Guide for the Latest Visual Studio Code in 2024 By JacksonML Visual Studio Code最新版1.85已经于2023年11月由其官网 https://code.visualstudio.com正式发布&#xff0c;这是微软公司2024年发行的的最…

vs2019报错MSB4019 找不到导入的项目“BuildCustomizations\CUDA 9.2.props”

在VS中执行生成&#xff0c;报错如下&#xff1a;严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB4019 找不到导入的项目“D:\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 9.2.props”。请确认 Import 声明“D:\Microso…

Mybatis----分页

1.什么是分页 分页&#xff08;Pagination&#xff09;是指将大量数据划分为多个页面进行展示的一种技术手段。在数据量较大的情况下&#xff0c;将所有数据一次性显示在页面上会导致加载时间过长和页面过于庞大&#xff0c;影响用户体验和系统性能。分页技术通过划分数据为多…

Mac Monitor:一款为macOS安全研究量身定制的高级独立系统监控工具

关于Mac Monitor Mac Monitor是一款功能强大的高级独立系统安全监控工具&#xff0c;该工具专为macOS安全研究、恶意软件分类和系统故障排除而设计&#xff0c;主要基于Apple Endpoint Security&#xff08;ES&#xff09;实现其功能。 Mac Monitor能够收集各种类型的系统事件…

量化交易学习2(因子研究)

因子有效性检验 参考1 参考2 在多因子研究框架中&#xff0c;因子的有效性检验是不可避免的工作&#xff0c;其本质是衡量一个因子的选股能力。 目前学术界和业界普遍使用的两种方法&#xff1a; 相关性检验 因子的相关性检验即检验单因子和收益率之间是否存在相关性 IC值 计…

搜狐新闻客户端使用Kotlin之后对JSON解析框架的探索

本文字数&#xff1a;7488字 预计阅读时间&#xff1a;45分钟 01 引言 自2017年Google发布Kotlin语言之后&#xff0c;Android开发由原来的Java开始向Kotlin过度&#xff0c;目前绝大部分Android开发岗位基本要求就是熟练使用Kotlin。事实上&#xff0c;很多有着多年历史的项目…

单片机学习笔记---矩阵键盘

目录 矩阵键盘的介绍 独立按键和矩阵按键的相同之处&#xff1a; 矩阵按键的扫描 代码演示 代码模块化移植 Keil自定义模板步骤&#xff1a; 代码编写 矩阵键盘就是开发板上右下角的这个模块 这一节的代码是基于上一节讲的LCD1602液晶显示屏驱动代码进行的 矩阵键盘的介…

主成分分析(PCA)Python

实际问题研究中&#xff0c;常常遇到多变量问题&#xff0c;变量越多&#xff0c;问题往往越复杂&#xff0c;且各个变量之间往往有联系。于是&#xff0c;我们想到能不能用较少的新变量代替原本较多的旧变量&#xff0c;且使这些较少的新变量尽可能多地保留原来变量所反映的信…

Idea Community社区版如何添加Run Dashboard

最近在学习spring cloud&#xff0c;跟着视频添加run dashboard&#xff0c;发现里面介绍的方法无法适用于idea community(社区版)。 然后自己研究了一下&#xff0c;成功添加&#xff0c;下面分享自己的方法。 如图&#xff0c;我的项目里添加了两个module&#xff0c;我想通…

【c语言】详解操作符(下)

前言&#xff1a; 在上文中&#xff0c;我们已经学习了 原码、反码、补码、移位 操作符、移位操作符、位操作符、逗号表达式、下标访问[ ]、函数调用&#xff08; &#xff09;&#xff0c;接下来我们将继续学习剩下的操作符。 1. 结构成员访问操作符 1.1 结构体成员的直接访…

79 C++对象模型探索。数据语义学 - 进程内存空间布局分析

不同的数据在内存中会有不同的保存时机&#xff0c;和保存位置&#xff0c;这一节就分析这个。 当运行一个可执行文件时候&#xff0c;操作系统就会把这个可执行文件加载到内存&#xff1b;此时进程有一个虚拟的地址空间&#xff08;内存空间&#xff09;&#xff0c;如下图&a…

Docker部署思维导图工具SimpleMindMap并实现公网远程访问

文章目录 1. Docker一键部署思维导图2. 本地访问测试3. Linux安装Cpolar4. 配置公网地址5. 远程访问思维导图6. 固定Cpolar公网地址7. 固定地址访问 SimpleMindMap 是一个可私有部署的web思维导图工具。它提供了丰富的功能和特性&#xff0c;包含插件化架构、多种结构类型&…

03_2 连续时间信号的傅里叶变换(FT) 非周期信号的傅里叶变换

各位看官&#xff0c;大家好&#xff01;本讲为《数字信号处理理论篇》03_2 连续时间信号的傅里叶变换 非周期信号的傅里叶变换。&#xff08;特别提示&#xff1a;课程内容为由浅入深的特性&#xff0c;而且前后对照&#xff0c;不要跳跃观看&#xff0c;请按照文章或视频顺序…