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数据库(函数)的更多相关文章

  1. 42.MySQL数据库安装,及驱动程序选择

    MySQL驱动程序安装: 我们使用Django来操作Mysql,实际上底层还是通过Python来操作的,因此我们想要使用Django来操作mysql,首先还是需要安装一个驱动程序,在Python3中, ...

  2. MySQL数据库----函数

    函数 MySQL中提供了许多内置函数,例如: CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符.一个多字节字符算作一个单字符. 对于一个包含五个二字节字符集, LENG ...

  3. MySQL数据库 : 函数和存储过程

    CONCAT 可以把多个字符串连在一起,如把 doc_id 和 title这两个字段的查询结果组合成一个字符串:SELECT CONCAT(doc_id,title) FROM simhash; CO ...

  4. day 42 mysql 数据库(2)

    前情提要: 本节继续学习数据库   一:ddl 创建表 >字段名 >数据类型 >约束规则 >显示建表语句 修改表: 二:数据类型 >数值类型 >小数类型 >字 ...

  5. 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)

    学生选课数据库SQL语句45道练习题: 一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...

  6. MySQL数据库常用函数

    一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 不区分大小写 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等 ...

  7. 数据库---MySQL常用函数总结

    一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x)    返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x)    返回大于或等于 ...

  8. MySQL数据库学习笔记(四)----MySQL聚合函数、控制流程函数(含navicat软件的介绍)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. MySQL数据库获取多个汉字拼音的首字母函数

    需求简介:最近的一个项目,想实现如下图所示的显示效果.很明显,如果能够获取对应的汉字词组中每个汉字的拼音首字母就可以实现了,如果是固定的几组汉字,人为的拼一下就可以 了,不过项目中有多处功能需要这个效 ...

  10. MYSQL数据库重点:自定义函数、存储过程、触发器、事件、视图

    一.自定义函数 mysql自定义函数就是实现程序员需要sql逻辑处理,参数是IN参数,含有RETURNS字句用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句. 语法: 创建: ...

随机推荐

  1. [linux] Git基本概念&操作

    1.基本概念 版本控制系统:一种软体工程技巧,籍以在开发的过程中,确保由不同人所编写的同一项目代码都得到更新.并追踪.记录整个开发过程. 集中式(SVN)/ 分布式(GIT)版本控制系统:SVN的版本 ...

  2. windows下安装python 且 安装pip

    1.安装python 第一步,windows下面的Python安装一般是通过软件安装包安装而不是命令行,所以我们首先要在Python的官方主页上面下载最新的Python安装包.  下载地址是:http ...

  3. CSS变量和浏览器前缀

    一.CSS变量 CSS变量是CSS的新特性,大多数浏览器都实现了这个功能,使用CSS变量有利代码复用,而且当我们修改变量值时,所有引用该变量的属性都会发生改变. 定义变量后可以有两种使用方法,第一种时 ...

  4. linux服务器市场特性高可用高性能 (集群上体现)安全

    https://www.linuxprobe.com/chapter-00.html 1 linux安全 更安全 对比windows  代码漏洞 及时修补 全世界看到源代码 2 linux 可以卸载图 ...

  5. LDAP协议入门

    LDAP协议入门(轻型目录访问协议) LDAP简介 轻型目录访问协议,全称:Lightweight Directory Access Protocol,缩写:LDAP,它是基于X.500标准的,但是简 ...

  6. 惊奇发现KEIL也可以C++编译了

    在Github上面浏览下载的一个工程,可以用KEIL打开,但是我竟然找不到mian函数.找了一圈发现是用到了面向对象的编程方法,那就必须支持C++,他怎么实现的呢? 看配置工程:明显的一个不一样 -- ...

  7. 西门子S7系列以太网通讯处理器安装调式操作

    北京华科远创科技有限研发的远创智控ETH-YC模块,PLC转以太网型号有MPI-ETH-YC01和MPI-ETH-YC01,适用于西门子S7-200/S7-300/S7-400.SMART S7-20 ...

  8. Go语言web开发---Cronexpr 包实现并发定时任务

    安装Cronexpr包: go get -u github.com/gorhill/cronexpr 这个包支持七位时间控制 *(秒) *(分) *(时) *(日) *(月) *(周) *(年) 栗子 ...

  9. Usb-type-C端口实现的挑战与设计方案

    Usb-type-C端口实现的挑战与设计方案 USB Type-C port implementation challenges and design solutions USB from 1.1 t ...

  10. python_xlutils : python利用xlutils修改表格内容

    一.xlutils是什么 是一个提供了许多操作修改excel文件方法的库: 属于python的第三方模块 xlrd库用于读取excel文件中的数据,xlwt库用于将数据写入excel文件,修改用xlu ...