07 常用函数
关系型数据库的常用函数大多数从命名到功能都是一样的,但也有少量不一致。通过常用函数的学习,我们可以更加方便的对数据进行操作。
函数的作用:
- 为了简化操作,mysql提供了大量的函数给程序员使用(比如输入当前时间,可以调用now()函数)
- 函数可以出现的位置:插入语句的values()中,更新语句中,删除语句中,查询语句及其子句中
函数类型
- 聚合函数
- 字符串函数
- 数值函数
- 日期函数
- 转换函数
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() );
官方文档连接
官方完整连接
https://dev.mysql.com/doc/refman/8.0/en/func-op-summary-ref.html
标签:常用,07,str2,str1,---,字符串,select,函数 From: https://blog.51cto.com/teayear/6214236