首页 > 其他分享 >07 常用函数

07 常用函数

时间:2023-04-21 22:02:42浏览次数:40  
标签:常用 07 str2 str1 --- 字符串 select 函数

07 常用函数

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

函数的作用:

  • 为了简化操作,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() );

官方文档连接

官方完整连接

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

相关文章

  • QT中在使用QMediaPlaylist类的insertMedia函数插入新播放文件后,出现播放顺序错误的分
    我下面的这段代码的意图是:当前的播放队列中插入一个播放文件到队首,使其为下一个播放文件。但是并没有达到我的预期。于是在代码中加入一段调试程序,将当前的播放文件的序号打印出来。 调试之后的结果如下:发现无论向播放队列中插入几次,当前的播放序列都是1。如果想要在播放......
  • 状态监测与故障诊断常用的方法
     可作为机械设备状态监测与故障诊断的信息是多种多样的,主要有:振动、声音、变形、应力、裂纹、磨损、腐蚀、温度、压力、流量、电流、转速、扭矩、功率、等等。大机组状态监测与故障诊断常用的方法,主要有以下几种。1.振动分析法 振动分析法是对设备所产生的机械振动(对大机组......
  • 5.常用脚本
    1.当前正在运行进程会话的请求信息useDB_NAMEsetnocountonsettransactionisolationlevelreaduncommitted;withcteas(selectt.session_idasspid,t.status,t.blocking_session_idasblocked,t.program_name,str(1.0*t.total_elapsed_time/1000,16......
  • 函数重载
    函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。#include<iostream>usingnamespacestd;voidprint(i......
  • 测试常用工具总结
    1.adb       安卓调试查日志等2.git         代码管理平台3.idea        java集成开发平台4.pycharm    Python集成开发平台5.jdk         Java编译环境6.jmeter       压测工具7......
  • 常用的Java开发工具IDEA、eclipse比较
    常用的Java开发工具比较​ 市场上Java开发常用的编辑器可谓是琳琅满目,令人眼花缭乱,甚至让人难以抉择。所以今天挑选了几款主流的编辑器进行介绍,都是功能比较丰富的IDE,至于大神使用的普通文本编辑器就不再此次考虑范围内,主要介绍IntelliJIDEA、Eclipse、NetBeans、VisualStudi......
  • js 时间格式化函数
    functiondateFormat(time,fmStr){constweekCN='一二三四五六日'constweekEN=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']letyear......
  • C++——string 成员函数 length(),size() 和 C strlen() 的区别
    //方法一:调用length()或size()stringstrTest="test";strTest.length();//4strTest.size();//4//方法二:转为C风格字符串,调用strlen()strlen(strTest.c_str());//4注意:当string中含有空字符’\0’,使用 strlen()获取stri......
  • ubuntu常用命令总结
    本地与服务器之间copy文件输入命令:【scp/path/to/source/file.tar.gzuser@destination:/path/to/destination/】/path/to/source/file.tar.gz是要复制的源文件的路径和文件名。user是目标服务器的用户名。destination是目标服务器的IP地址或主机名。:/path/to/destin......
  • 分享自己接私活常用的开源系统
    目前使用的是JNPF框架。技术栈上使用的SpringBoot、SpringCloud、SpringWeb、MyBatis、Swagger、Vue、Element。这些都是比较主流的技术,无论是技术层面的先进性还是学习难度都是比较低的,目前网络上有大量可供参考学习的资料。并且它支持前后端分离和微服务的版本,算是比较完善......