云计算教程之RDS运维篇函数

举报
tea_year 发表于 2024/08/23 12:05:21 2024/08/23
【摘要】  常用函数07 常用函数函数的作用:函数类型1. 聚合函数1.1 avg(字段)1.2 count(字段)1.3 max(字段)1.4 min(字段)1.5 sum(字段)补充2. 字符串相关2.1 合并字符串函数:concat(str1,str2,str3…)2.2 比较字符串大小函数:strcmp(str1,str2)2.3 获取字符串字节数函数:length(str)2.4 获取字符串...

 常用函数

07 常用函数函数的作用:

函数类型1.

聚合函数1.1 avg(字段)1.2 count(字段)1.3 max(字段)1.4 min(字段)1.5 sum(字段)补充

2. 字符串相关2.1 合并字符串函数:concat(str1,str2,str3…)2.2 比较字符串大小函数:strcmp(str1,str2)2.3 获取字符串字节数函数:length(str)2.4 获取字符串字符数函数:char_length(str)2.5 字母大小写转换函数2.6 字符串查找函数2.6.1 find_in_set(str1,str2) 2.6.2 field(str,str1,str2,str3…) 2.6.3 locate(str1,str2) 2.6.4 position(str1 IN str2)2.6.5 instr(str1,str2) 2.7 获取指定位置的子串2.7.1 elt(index,str1,str2,str3…) 2.7.2 left(str,n) 2.7.3 right(str, n)2.7.4 substring(str,index,len) 2.8 字符串去空函数2.8.1 ltrim(str) 2.8.2 rtrim(str)2.8.3 trim(str)2.9 字符串替换函数2.9.1 insert(str1,index,len,str2)2.9.2 replace(str,str1,str2)

3. 数值相关3.1 绝对值函数:abs(x)3.2 向上取整函数:ceil(x)3.3 向下取整函数:floor(x)3.4 随机数函数:rand()

4. 时间和日期相关4.1 获取当前日期:curdate(),current_date()4.2获取当前时间:curtime(),current_time()4.3 获取当前日期时间:now()4.4 从日期中选择出月份数:month(date),monthname(date)4.5 从日期中选择出周数:week(date)4.6 从日期中选择出周数:year(date)4.7 从时间中选择出小时数:hour(time)4.8 从时间中选择出分钟数:minute(time)4.9 从时间中选择出今天是周几:weekday(date),dayname(date)4.9.1 返回日期时间的日期部分 Date( date ) 4.10 返回一个格式化的日期或时间串 Date_Format( date , format )4.11 年月日小时分秒官方文档连接

关系型数据库的常用函数大多数从命名到功能都是一样的,但也有少量不一致。通过常用函数的学习,我们可以更加方便的对数据进行操作。

函数的作用:

  • 为了简化操作,mysql提供了大量的函数给程序员使用(比如输入当前时间,可以调用now()函数)

  • 函数可以出现的位置:插入语句的values()中,更新语句中,删除语句中,查询语句及其子句中


函数类型

  1. 聚合函数

  2. 字符串函数

  3. 数值函数

  4. 日期函数

  5. 转换函数


1. 聚合函数

  • 聚集函数用于汇集记录(比如不想知道每条学生记录的确切信息,只想知道学生记录数量,可以使用count())。

  • 聚集函数就是用来处理“汇集数据”的,不要求了解详细的记录信息。

  • 聚集函数(aggregate function) 运行在行组上,计算和返回单个值的函数

实验表:

create table student(
name varchar(15),
gender varchar(15),
age int
);
insert into student values("lilei","male",18);
insert into student values("alex","male",17);
insert into student values("jack","male",20);
insert into student values("john","male",19);
insert into student values("nullpeople","male",null);

1.1 avg(字段)

  • 返回指定字段的数据的平均值

  • avg() 通过对表中行数计数并计算指定字段的数据总和,求得该字段的平均值。

  • avg() 函数忽略列值为 NULL 的行,如果某行指定字段为null,那么不算这一行

select avg(age) as '平均年龄' from student ;

1.2 count(字段)

  • 返回指定字段的数据的行数(记录的数量)

  • 字段可以为"",为时代表所有记录数,与字段数不同的时,记录数包括某些字段为null的记录,而字段数不包括为null的记录。

select count(*) as '男生总人数' from student where gender='male';

1.3 max(字段)

  • 返回指定字段的数据的最大值

  • 如果指定字段的数据类型为字符串类型,先按字符串比较,然后返回最大值。

  • max() 函数忽略列值为 null的行

select max(age) as '最大年龄' from student ;

1.4 min(字段)

  • 返回指定字段的数据的最小值

  • 如果指定字段的数据类型为字符串类型,先按字符串比较,然后返回最小值。

  • min()函数忽略列值为 null的行

select min(age) as '最小年龄' from student ;

1.5 sum(字段)

  • 返回指定字段的数据之和

  • sum()函数忽略列值为 null的行

select sum(age) as '所有人的年龄和' from student ;

补充

  • 聚集函数的字段如果的数据为null,则忽略值为null的记录。

    • 比如avg:有5行,但是只有四行的年龄数据,计算结果只算四行的,

    • 但是如果不针对字段,那么会计算,比如count(x)是计算记录数的,null值不影响结果。

  • 还有一些标准偏差聚集函数,这里不讲述,想了解更多的可以百度。

  • 聚集函数在5.0+版本上还有一个选项DISTINCT,与select中类似,就是忽视同样的字段


2. 字符串相关

2.1 合并字符串函数:concat(str1,str2,str3…)

  • 用于将多个字符串合并成一个字符串,如果传入的值中有null,那么最终结果是null

  • 如果想要在多个字符串合并结果中将每个字符串都分隔一下,可以使用concat_ws(分隔符,str1,str2,str3…),如果传入的分隔符为null,那么最终结果是null(不过这时候如果str有为null不影响结果)

select concat('我是' , '超人') ; --我是超人
​
select concat_ws(' ' , 'i' , 'am' , 'superman'); -- i am superman

2.2 比较字符串大小函数:strcmp(str1,str2)

  • 用于比较两个字符串的大小。左大于右时返回1,左等于右时返回0,,左小于于右时返回-1,

  • strcmp类似编程语言中的比较字符串函数(依据ascll码?),会从左到右逐个比较,直到有一个不等就返回结果,否则比较到结尾。

select strcmp('a' , 'b');   ---: -1
select strcmp('ab' , 'ac'); ---: -1
select strcmp('d' , 'a');   ---: 1
select strcmp('a' , 'a');   ---: 0

2.3 获取字符串字节数函数:length(str)

  • 用于获取字符串字节长度(返回字节数,因此要注意字符集)

select length('hello');     ---: 5
select length('你好');      ---: 6    

2.4 获取字符串字符数函数:char_length(str)

  • 用于获取字符串长度

select char_length('hello');    ---: 5
select char_length('你好');     ---: 长度2,但是这个是需要注意编码格式,现在开发时使用的基本都是utf8、utf8mb4

2.5 字母大小写转换函数

大写:upper(x),ucase(x);

select upper('a');      ---: A
select upper('abc');    ---: ABC

小写:lower(x),lcase(x)

select lower('A');      ---: a
select lower('Jack,你好');    ---: jack,你好

2.6 字符串查找函数

2.6.1 find_in_set(str1,str2)

返回字符串str1在str2中的位置,str2包含若干个以逗号分隔的字符串(可以把str2看出一个列表,元素是多个字符串,查找结果是str1在str2这个列表中的索引位置,从1开始)

select find_in_set('abc' , '123,abc,456');---2

2.6.2 field(str,str1,str2,str3…)

与find_in_set类似,但str2由一个类似列表的字符串变成了多个字符串,返回str在str1,str2,str3…中的位置

select field('abc' , '123','abc','456');---2

2.6.3 locate(str1,str2)

返回子串str1在字符串str2中第一次出现的位置

select locate('a' , '123a123a'); ---: 4

2.6.4 position(str1 IN str2)

返回子串str1在字符串str2中的位置

select position('a' in '123abc456abc'); ---: 4

2.6.5 instr(str1,str2)

返回子串str2在字符串str1中的位置【注意这里调转了】

select instr('123abc456abc' , 'a'); ---: 4

2.7 获取指定位置的子串

2.7.1 elt(index,str1,str2,str3…)

返回指定index位置的字符串

select elt( 1, 'a' ,'b' ,'c') ; ---: a

2.7.2 left(str,n)

截取str左边n个字符

select left('superman' , 5); ----: super

2.7.3 right(str, n)

截取str右边n个字符

​
select right('superman' , 3); ----: man

2.7.4 substring(str,index,len)

从str的index位置截取len个字符

select substring('iamsuperman' , 4, 5) ; ---: super

2.8 字符串去空函数

2.8.1 ltrim(str)

去除字符串str左边的空格

select ltrim('  hello jack'); ----: hello jack

2.8.2 rtrim(str)

去除字符串str右边的空格

select rtrim('  hello jack  '); ----:   hello jack

2.8.3 trim(str)

去除字符串str两边的空格

select trim('  hello jack  '); ----: hello jack


2.9 字符串替换函数

2.9.1 insert(str1,index,len,str2)

使用str2从str1的index位置替换str1的len个元素

select insert('hello world' , 7 , 5 , 'amy'); ---: hello amy

2.9.2 replace(str,str1,str2)

将str中的子串str1全部替换成str2

select replace('123 admin 456admin' , 'admin' , 'jack'); ---: 123 jack 456jack


3. 数值相关

数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角或几何运算,因此没有串或日期—时间处理函数的使用那么频繁。但在主要DBMS的函数中,数值函数是最一致最统一的函数。

3.1 绝对值函数:abs(x)

返回x的绝对值

select abs(-3.1415927); ---: 3.1415927

3.2 向上取整函数:ceil(x)

返回x的向上取整的整数

select ceil(3.14); ---: 4

3.3 向下取整函数:floor(x)

返回x的向下取整的整数

select floor(3.14); ---: 3

3.4 随机数函数:rand()

返回0-1内的随机数

如果想对某种情况都使用同一随机值,可以使用rand(x),x相同时返回同样的随机结果

select rand(); ---: 0.15522042769493574


4. 时间和日期相关

日期和时间采用相应的数据类型和特殊的格式存储,以便能快速和有效地排序或过滤,并且节省物理存储空间。日期和时间函数在MySQL语言中具有重要的作用。

4.1 获取当前日期:curdate(),current_date()

select curdate(); ---: 2019-08-21

4.2获取当前时间:curtime(),current_time()

select curtime(); ---: 07:32:44

4.3 获取当前日期时间:now()

select now(); ---: 2019-08-21 08:33:19

4.4 从日期中选择出月份数:month(date),monthname(date)

select month( now() ); ---: 8

4.5 从日期中选择出周数:week(date)

select week( now() ); ---: 33 从当前年开始计算的周数

4.6 从日期中选择出周数:year(date)

select year( now() ); ---: 2019 当前年的年份

4.7 从时间中选择出小时数:hour(time)

select hour( curtime() ) ; ---: 8 运行时间是 8点

4.8 从时间中选择出分钟数:minute(time)

select minute( curtime() ) ; ---: 37 运行时间是 8点37分

4.9 从时间中选择出今天是周几:weekday(date),dayname(date)

select weekday( curdate() ); ---: 2  从0 开始计算
select dayname( curdate() ); ---: Wednesday 这个星期三是正确的

4.9.1 返回日期时间的日期部分 Date( date )

select date( now() ); ---: now() 函数也可以替换为表的某个时间格式的列名

4.10 返回一个格式化的日期或时间串 Date_Format( date , format )

date 参数是合法的日期。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)
%p AM 或 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 位
select DATE_FORMAT(now() , '%Y-%m-%d %H:%i:%S'); ---: 2019-08-21 09:06:18

4.11 年月日小时分秒

select year(  now() );
select month( now() );
select day(   now() );
select Hour(  now() );
select Minute(now() );
select Second(now() );

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。