42、mysql数据库(函数)
1、mysql中提供的内置函数:
(1)数学函数:
1)ROUND(x,y):
返回参数x的四舍五入的有y位小数的值。x不可转换时返回0,x为null时返回null。
2)RAND():
返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
(2)聚合函数(常用于GROUP BY从句的SELECT查询中):
1)AVG(col):返回指定列的平均值,不包括null,全为null时返回结果为null。
2)COUNT(col):返回指定列中非NULL值的个数,全为null时返回结果为0。
3)count(*):返回表中所有行的个数,包括null。
4)MIN(col):返回指定列的最小值,不包括null,全为null时返回结果为null。
5)MAX(col):返回指定列的最大值,不包括null,全为null时返回结果为null。
6)SUM(col):返回指定列的所有值之和,不包括null,全为null时返回结果为null。
7)GROUP_CONCAT(col):返回由属于一组的列值连接组合而成的结果,不包括null,全为null时返回结果为null。
8)提示:在排序中null是最小的,null和任何值比较都没有结果,null和任何值相加都得null。
(3)字符串函数:
1)CHAR_LENGTH(str):
返回字符串str的字符长度,一个多字节字符算作一个单字符。str为null时,返回值为NULL。
2)CONCAT(str1,str2,...):
字符串横向拼接,如有任何一个参数为NULL,则返回值为NULL。
3)CONCAT_WS(<separator>,str1,str2,...):
字符串横向拼接,可以自定义连接符,如有任何一个参数为NULL,会变为空字符串再拼接。
4)CONV(N,from_base,to_base):
进制转换函数,N不可转换时返回0,N为null时返回null。
例如:SELECT CONV('a',16,2) from dual;
#表示将 a 由16进制转换为2进制字符串表示。
5)FORMAT(X,D):
将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位,并将结果以字符串的形式返回。
X为null时返回null,X不可转换时用0表示。若 D 为 0 则返回结果不带有小数点,或不含小数部分。
例如:SELECT FORMAT(12332.1,4);
6)INSERT(str,pos,len,newstr):
在str的指定位置插入字符串。pos:要替换位置起始位置,下标从1开始。len:替换的长度,是闭区间。newstr:新字符串。
str为null时返回null。
注意:如果pos超过原字符串长度,则返回原字符串。如果pos没有超过原字符串长度,而len超过剩余字符串长度,剩余字符
串则由新字符串完全替换。
7)INSTR(str,substr):
返回字符串 str 中子字符串的第一个出现位置。
str为null时返回null,在str中找不到子字符串时返回0。
8)LEFT(str,len):
返回字符串str 从开始的len位置的子序列字符。
str为null时返回null。
注意:如果len的长度超过str的长度,则返回原字符串。如果len的长度没有超过str的长度,则返回从开始的len位置的子序列
字符。
9)LOWER(str):
字符串变小写。
str为null时返回null,且只对英文字符生效。
10)UPPER(str):
字符串变大写。
str为null时返回null,且只对英文字符生效。
11)REVERSE(str):
返回字符串 str ,顺序和字符顺序相反。
str为null时返回null。
12)SUBSTRING(str,pos)、SUBSTRING(str FROM pos),SUBSTRING(str,pos,len)、SUBSTRING(str FROM pos FOR len):
不带有len参数的格式从字符串str返回一个子字符串,起始于位置 pos。
带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。
使用 FROM的格式为标准 SQL语法。
str为null时返回null,pos从1开始,len是长度,pos和len是闭区间。
注意:如果pos超过原字符串长度,则返回空字符串。如果pos没有超过原字符串长度,而len超过剩余字符串长度,则返回剩余
字符串。
也可能对pos使用一个负值,假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置,在以下格
式的函数中可以对pos 使用一个负值。
例子:
mysql> SELECT SUBSTRING('Quadratically',5);
-> 'ratically'
mysql> SELECT SUBSTRING('foobarbar' FROM 4);
-> 'barbar'
mysql> SELECT SUBSTRING('Quadratically',5,6);
-> 'ratica'
mysql> SELECT SUBSTRING('Sakila', -3);
-> 'ila'
mysql> SELECT SUBSTRING('Sakila', -5, 3);
-> 'aki'
mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
-> 'ki'
13)replace(str,oldstr,newstr):
字符串替换函数。
str为null时返回null,替换不了的返回原字符串。
(4)日期和时间函数:
1)说明:函数中指代的参数代指如下:
date=>curdate()、now()、'2019/12/8',不符合条件的返回null。
time=>curtime()、now()、'15:10:14',不符合条件的返回0。
2)CURDATE()或CURRENT_DATE():返回当前的日期。
3)CURTIME()或CURRENT_TIME():返回当前的时间。
4)NOW():返回当前的日期和时间。
5)DAYOFWEEK(date):返回date所代表的一星期中的第几天(1~7,代表周日到周六)。
6)DAYOFMONTH(date):返回date是一个月的第几天(1~31)。
7)DAYOFYEAR(date):返回date是一年的第几天(1~366)。
8)DAYNAME(date):返回date的星期名。
9)DATE_FORMAT(date,format):根据format字符串格式化date值(重点)。
--参数:
--示例1:
SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
#'Sunday October 2009'
SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
#'22:23:00'
SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
#'4th 00 Thu 04 10 Oct 277'
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
#'22 22 10 10:23:00 PM 22:23:00 00 6'
SELECT DATE_FORMAT('1999-01-01', '%X %V');
#'1998 52'
SELECT DATE_FORMAT('2006-06-00', '%d');
#'00'
--示例二:
--准备表:
CREATE TABLE blog1 (
id INT PRIMARY KEY auto_increment,
NAME CHAR (32) not null unique,
sub_time datetime
);
--准备数据:
insert into blog1 (name, sub_time)
values
('第1篇','2015-03-01 11:31:21'),
('第2篇','2015-03-11 16:31:21'),
('第3篇','2016-07-01 10:21:31'),
('第4篇','2016-07-22 09:23:21'),
('第5篇','2016-07-23 10:11:11'),
('第6篇','2016-07-25 11:21:31'),
('第7篇','2017-03-01 15:33:21'),
('第8篇','2017-03-01 17:32:21'),
('第9篇','2017-03-01 18:31:21');
--提取sub_time字段的值,按照格式后的结果即"年月"来分组:
SELECT DATE_FORMAT(sub_time,'%Y-%m') as ym,COUNT(1) FROM blog1 GROUP BY ym;
10)HOUR(time):返回time的小时值(0~23)。
11)MINUTE(time):返回time的分钟值(0~59)。
12)MONTH(date):返回date的月份值(1~12)。
13)MONTHNAME(date):返回date的月份名。
14)QUARTER(date):返回date在一年中的季度(1~4)。
15)WEEK(date):返回日期date为一年中第几周(0~53)。
16)YEAR(date):返回日期date的年份(1000~9999)。
(5)加密函数:
1)MD5(str):
计算字符串str的MD5校验和。
str为null时返回null。
2)PASSWORD(str):
返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法。
str为null时返回空字符串。
(6)控制流函数:
1)语法:
A、IF(test,t,f):
如果test是真,返回t,否则返回f。
B、IFNULL(arg1,arg2):
如果arg1是空,返回arg2,否则返回arg1。
B、NULLIF(arg1,arg2):
如果arg1=arg2返回NULL,否则返回arg1。
C、CASE WHEN test THEN result1 ELSE result2 END
如果test是真,则返回result1,否则返回result2。
D、CASE test WHEN value THEN result1 ELSE result2 END
如果test和value相等,则返回result1,否则返回result2。
2)示例:
--准备表:
------------------------------
--Table structure for teacher
------------------------------
DROP TABLE IF EXISTS teacher;
CREATE TABLE teacher (
id int PRIMARY KEY AUTO_INCREMENT comment '自增id号',
t_name varchar(50) not null comment '老师姓名',
t_id varchar(50) not null unique comment '老师编号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
------------------------------
--Records of teacher
------------------------------
INSERT INTO teacher(t_name,t_id) VALUES
('大王','1'),
('alex','2'),
('egon','3'),
('peiqi','4');
------------------------------
--Table structure for course
------------------------------
DROP TABLE IF EXISTS course;
CREATE TABLE course (
id int PRIMARY KEY AUTO_INCREMENT comment '自增id号',
c_name varchar(50) not null comment '课程名称',
c_id varchar(50) not null unique comment '课程编号',
t_id varchar(50) comment 'teacher表t_id的外键',
FOREIGN KEY(t_id) REFERENCES teacher(t_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
------------------------------
-- Records of course
------------------------------
INSERT INTO course(c_name,c_id,t_id) VALUES
('python','1','1'),
('java', '2','2'),
('linux', '3','3'),
('web', '4','2');
------------------------------
--Table structure for student
------------------------------
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id int PRIMARY KEY AUTO_INCREMENT comment '自增id号',
s_name varchar(50) not null comment '学生姓名',
s_id varchar(50) not null unique comment '学生学号',
s_age int comment '学生年龄',
s_sex char(1) comment '学生性别'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-------------------------------
--Records of student
------------------------------
INSERT INTO student(s_name,s_id,s_age,s_sex) VALUES
('鲁班', '1',12, '男'),
('貂蝉', '2',20, '女'),
('刘备', '3',35, '男'),
('关羽', '4',34, '男'),
('张飞', '5',33, '女');
------------------------------
--Table structure for score
------------------------------
DROP TABLE IF EXISTS score;
CREATE TABLE score (
id int PRIMARY KEY AUTO_INCREMENT comment '自增id号',
s_id varchar(50) comment 'student表s_id的外键',
c_id varchar(50) comment 'course表c_id的外键',
num double comment '学生分数',
FOREIGN KEY(s_id) REFERENCES student(s_id),
FOREIGN KEY(c_id) REFERENCES course(c_id)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO score(s_id,c_id,num) VALUES
('1', '1', '79'),
('1', '2', '78'),
('1', '3', '35'),
('2', '2', '32'),
('3', '1', '66'),
('4', '2', '77'),
('4', '1', '68'),
('5', '1', '66'),
('2', '1', '69'),
('4', '4', '75'),
('5', '4', '66.7');
--统计各科各分数段人数,显示格式:课程ID、课程名称、[100-85]、[85-70]、[70-60]、[ <60]:
select c.c_id,c.c_name,
sum(CASE WHEN s.num BETWEEN 85 and 100 THEN 1 ELSE 0 END) as '[100-85]',
sum(CASE WHEN s.num BETWEEN 70 and 85 THEN 1 ELSE 0 END) as '[85-70]',
sum(CASE WHEN s.num BETWEEN 60 and 70 THEN 1 ELSE 0 END) as '[70-60]',
sum(CASE WHEN s.num < 60 THEN 1 ELSE 0 END) as '[ <60]'
from score as s,course as c where c.c_id=s.c_id GROUP BY c.c_id;
2、自定义函数:
(1)说明:
1)函数中不要写sql语句(否则会报错),函数仅仅只是一个功能,是一个在sql中被应用的功能。
2)若要想在begin...end...中写sql,请用存储过程。
(2)创建函数:
delimiter //
create function f5(
i int
/*定义输入值的类型*/
)
returns int
/*定义返回值的类型*/
begin
declare res int default 0;
/*在函数体中定义变量类型及默认值*/
if i = 10 then
set res=100;
elseif i = 20 then
set res=200;
elseif i = 30 then
set res=300;
else
set res=400;
end if;
return res;
end //
delimiter ;
(3)执行函数:
(4)删除函数:
1)语法:drop function <func_name>;
2)示例:drop function f5;
42、mysql数据库(函数)的更多相关文章
- 42.MySQL数据库安装,及驱动程序选择
MySQL驱动程序安装: 我们使用Django来操作Mysql,实际上底层还是通过Python来操作的,因此我们想要使用Django来操作mysql,首先还是需要安装一个驱动程序,在Python3中, ...
- MySQL数据库----函数
函数 MySQL中提供了许多内置函数,例如: CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符.一个多字节字符算作一个单字符. 对于一个包含五个二字节字符集, LENG ...
- MySQL数据库 : 函数和存储过程
CONCAT 可以把多个字符串连在一起,如把 doc_id 和 title这两个字段的查询结果组合成一个字符串:SELECT CONCAT(doc_id,title) FROM simhash; CO ...
- day 42 mysql 数据库(2)
前情提要: 本节继续学习数据库 一:ddl 创建表 >字段名 >数据类型 >约束规则 >显示建表语句 修改表: 二:数据类型 >数值类型 >小数类型 >字 ...
- 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)
学生选课数据库SQL语句45道练习题: 一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...
- MySQL数据库常用函数
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 不区分大小写 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等 ...
- 数据库---MySQL常用函数总结
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于 ...
- MySQL数据库学习笔记(四)----MySQL聚合函数、控制流程函数(含navicat软件的介绍)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库获取多个汉字拼音的首字母函数
需求简介:最近的一个项目,想实现如下图所示的显示效果.很明显,如果能够获取对应的汉字词组中每个汉字的拼音首字母就可以实现了,如果是固定的几组汉字,人为的拼一下就可以 了,不过项目中有多处功能需要这个效 ...
- MYSQL数据库重点:自定义函数、存储过程、触发器、事件、视图
一.自定义函数 mysql自定义函数就是实现程序员需要sql逻辑处理,参数是IN参数,含有RETURNS字句用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句. 语法: 创建: ...
随机推荐
- STM32的三种启动方式
- 项目实践之工作流引擎基本文档!Activiti工作流框架中流程引擎API和服务详解
流程引擎的API和服务 流程引擎API(ProcessEngine API)是与Activiti打交道的最常用方式 Activiti从ProcessEngine开始.在ProcessEngine中,可 ...
- JAVA并发(3)-ReentrantReadWriteLock的探索
1. 介绍 本文我们继续探究使用AQS的子类ReentrantReadWriteLock(读写锁).老规矩,先贴一下类图 ReentrantReadWriteLock这个类包含读锁和写锁,这两种锁都存 ...
- 使用 Bridge to Kubernetes 简化云端开发
当我们面对一个大型应用程序,它有大量的微服务,并希望完成一些功能开发? 我们面临许多挑战,其中之一将是处理正确的环境,如何进行开发.我们知道,在团队中解决这个问题的最佳方法是将其容器化并在云上托管.这 ...
- 将Oracle数据库改为归档模式并启用Rman备份
如下Linux环境下对单节点数据库采用文件系统情况的配置归档模式过程. 首先查看数据库归档模式和磁盘使用情况,确定归档文件放到什么位置: [oracle@gisdbserver ~]$ sqlplus ...
- CUDA 11功能清单
CUDA 11功能清单 基于NVIDIA Ampere GPU架构的新型NVIDIA A100 GPU在加速计算方面实现了最大的飞跃.A100 GPU具有革命性的硬件功能,CUDA 11与A100一起 ...
- YOLOV4各个创新功能模块技术分析(三)
YOLOV4各个创新功能模块技术分析(三) 八.数据增强相关-Stylized-ImageNet 论文名称:ImageNet-trained cnns are biased towards text ...
- 基于区域的CNN(R-CNN)
基于区域的CNN(R-CNN) Region-based CNNs (R-CNNs) 基于区域的卷积神经网络或具有CNN特征的区域(R-CNN)是一种将深度模型应用于目标检测的开创性方法.在本节中,将 ...
- 适用于Windows和Linux的Yolo-v3和Yolo-v2(上)
适用于Windows和Linux的Yolo-v3和Yolo-v2(上) https://github.com/eric-erki/darknetAB (用于对象检测的神经网络)-Tensor Core ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载
在上一篇文章里,我们通过注入sentinel component到apigateway实现了对下游服务的保护,不过受限于目前变更component需要人工的重新注入配置以及重启应用更新componen ...