【MySQL】函数

1. DQL执行顺序

在这里插入图片描述

2. 函数

2.1 字符串函数

函数功能
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个长度的字符串

2.2 数值函数

函数功能
ceil(x)向上取整
floor(x)向下取整
mod(x/y)返回x/y的模
rand()返回0~1的随机数
round(x,y)求参数x的四舍五入的值,保留y位小数

2.3 日期函数

函数功能
curdate()返回当前日期
curtime()返回当前时间
now()返回当前日期和时间
year(date)获取指定date年份
month(date)获取指定date月份
day(date)获取指定date日期
date_add(date, INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
date_sub(date, INTERVAL expr type)返回一个日期/时间值减去一个时间间隔expr后的时间值
datediff(date1, date2)返回起始时间date1和结束时间date2之间的天数
date_format(date,format)以不同的格式显示日期/时间数据

date_format中format参数是日期/时间输出的格式,常用的格式有:

格式描述
%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:mm: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 位

2.4 流程函数

函数功能
if(value, t, f)如果value为true,则返回t,否则返回f
ifnull(value1, value2)如果value1不为空,返回value1,否则返回value2
case when [val1] then [res1] … else [default] end如果val1为true,返回res1,…否则返回default默认值
case [expr] when [val1] then [res1] … else[default] end如果expr的值等于val1,返回res1,…否则返回default默认值

2.5 窗口函数

2.5.1 介绍

窗口函数可以像聚合函数一样对一组数据进行分析并返回结果,二者的不同指出之处在于,窗口函数不是将一组数据汇总成单个结果,而是为每一行数据都返回一个结果。

窗口函数定义:

窗口函数名称 ([可选的分析字段或表达式]) over(
	# 分区
    partition by ...
    # 排序
    order by ...
    # 窗口大小
    frame_clause
)
  • over 子句用于指定一个数据分析窗口。

  • partition by 类似于 group by,会分别针对每个分区单独进行分析。

  • order by 用于指定分区内数据的排序方式

  • frame_clause 用于指定一个移动的分析窗口,窗口总是位于分区的范围之内,是分区的一个子集。在制定了分析窗口之后,窗口函数不再基于分区进行分析,而是基于窗口内的数据进行分析。

  • 指定窗口函数大小的具体选项如下:

    {rows | range} frame_start
    {rows | range} between frame_start and frame_end
    

    row 表示以数据行为单位计算窗口的偏移量,range 表示以数值(10天、5千米等)为单位计算窗口的偏移量

  • frame_start 用于定义窗口的起始位置,包括以下内容:

    • unbounded preceding:表示窗口从分区的第一行开始
    • n preceding:表示窗口从当前行之前的第n行开始
    • current row:表示窗口从当前行开始
  • frame_end 用于定义窗口的结束位置,包括以下内容:

    • current row:表示窗口从当前行结束
    • n following:表示窗口从当前行之后的第n行结束
    • unbounded following:表示窗口到分区的最后一行结束

2.5.2 聚合窗口函数

avg、sum… over()

2.5.3 排名窗口函数

排名窗口函数可以用来获取数据的分类排名,常见的排名窗口函数如下:

排名窗口函数描述
row_unmber()为分区中的每行数据分配一个系列号,序列号从1开始
rank()返回当前行在分区中的名次,如果存在名次相同的数据,后续的排名将会产生跳跃
dense_rank()返回当前行在分区中的名次,即使存在名次相同的数据,后续的排名也是连续的
percent_rank()以百分比的形式返回当前行在分区中的名次。如果存在名词相同的数据,后续的排名将会产生跳跃
cume_dist()计算当前行在分区内的累积分布
ntile(n )将分区内的数据分为n等分,并返回当前行所在的分区位置

排名窗口函数不支持动态的窗口大小选项,而是以整个分区作为分析的窗口。

2.5.4 取值窗口函数

取值窗口函数可以用来返回窗口内指定位置的行数据,常见的取值窗口函数如下:

取值窗口函数描述
lag()返回窗口内当前行之前的第n行数据
lead()返回窗口内当前行之后的第n行数据
first_value()返回窗口内第一行数据
last_value()返回窗口内最后一行数据
nth_value()返回窗口内第n行数据
### MYSQL 函数概述 在 MySQL 数据库管理系统中,函数是一类重要的工具,可以用来执行各种计算、转换和其他操作。这些函数分为内置函数和自定义函数两大类。以下是常见的 MySQL 内置函数分类及其具体用法。 --- #### **1. 字符串函数** 字符串函数主要用于处理字符型数据,支持拼接、截取、替换等功能。 - **`CONCAT(str1, str2, ...)`**: 将多个字符串连接成一个字符串。 ```sql SELECT CONCAT('Hello', ' ', 'World'); -- 返回 "Hello World" ``` - **`SUBSTRING(str, pos, len)`**: 提取子字符串,从 `pos` 开始提取长度为 `len` 的部分。 ```sql SELECT SUBSTRING('MySQL Function', 7, 8); -- 返回 "Function" ``` - **`REPLACE(str, from_str, to_str)`**: 替换字符串中的部分内容。 ```sql SELECT REPLACE('Database Management System', 'Management', 'Admin'); -- 返回 "Database Admin System" ``` - **`UPPER(str)` 和 `LOWER(str)`**: 转换字符串大小写。 ```sql SELECT UPPER('mysql'), LOWER('MYSQL'); -- 返回 "MYSQL", "mysql" ``` 以上内容来源于常见字符串函数介绍[^2]。 --- #### **2. 日期时间函数** 日期时间函数用于处理与时间和日期相关的数据。 - **`NOW()`**: 获取当前的日期和时间。 ```sql SELECT NOW(); -- 返回类似于 "2023-10-05 14:30:00" ``` - **`DATE(date_time_expr)`**: 提取日期部分。 ```sql SELECT DATE('2023-10-05 14:30:00'); -- 返回 "2023-10-05" ``` - **`DATE_FORMAT(date, format)`**: 根据指定格式化模板返回日期/时间字符串。 ```sql SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 自定义格式输出 ``` 相关内容可参见日期函数说明[^2]。 --- #### **3. 数学函数** 数学函数提供了基本的数值运算能力。 - **`ABS(num)`**: 计算绝对值。 ```sql SELECT ABS(-10); -- 返回 10 ``` - **`ROUND(num, decimals)`**: 对数字四舍五入到指定位数的小数。 ```sql SELECT ROUND(123.456, 2); -- 返回 123.46
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吞吞吐吐大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值