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. [java] IDEA

    快捷键 shift+shift:搜索 ctrl+d:复制行 ctrl+x:删除行 ctrl+p:查看方法参数 ctrl+o:查看类方法 ctrl+h:查看类结构 ctrl+i:实现接口方法 ctrl+ ...

  2. SSH连接自动断开的解决方法(deb/rpm)

    ######### 修改后的: ## # tail -f -n 20 sshd_config#MaxStartups 10:30:60#Banner /etc/issue.net # Allow cl ...

  3. linux 详解useradd 命令基本用法

    linux 详解useradd 命令基本用法 时间:2019-03-24 本文章向大家介绍linux 详解useradd 命令基本用法,主要包括linux 详解useradd 命令基本用法使用实例.应 ...

  4. Linux 文件隐藏属性-创建文件默认权限

    Linux特殊权限介绍 # password原本只有root可以访问但是为什么普通用户在修改密码的时候也可以改里面的内容. [root@gong ~]# ll /usr/bin/passwd -rws ...

  5. Python将PDF转为TXT

    PDFMiner----python的PDF解析器和分析器 1.官方文档:http://www.unixuser.org/~euske/python/pdfminer/index.html 2.特征 ...

  6. openresty 学习笔记六:使用session库

    openresty 学习笔记六:使用session库 lua-resty-session 是一个面向 OpenResty 的安全和灵活的 session 库,它实现了 Secure Cookie Pr ...

  7. Go语言协程并发---原子操作

    package main import ( "fmt" "sync/atomic" ) /* 用原子来替换锁,其主要原因是: 原子操作由底层硬件支持,而锁则由操 ...

  8. kindeditor富文本框使用方法

    这周我一共使用了两个文本框编辑器!我的上一篇文档讲的是wangeditor这个编辑器,现在就来讲讲kindeditor这个编辑器! 首先还是去它的官网去下载脚本! http://kindeditor. ...

  9. SLAM图优化g2o

    SLAM图优化g2o 图优化g2o框架 图优化的英文是 graph optimization 或者 graph-based optimization, "图"其实是数据结构中的gr ...

  10. Pass Infrastructure基础架构(下)

    Pass Infrastructure基础架构(下) pass注册  PassRegistration该类在示例中简要显示了各种pass类型的定义 .该机制允许注册pass类,以便可以在文本pass管 ...