概念:函数类似于java的方法(将实现某个功能的逻辑语句封装到方法中,对外暴露一个公开的名字,就是方法名)。

好处:

1.隐藏类具体功能的实现细节

2.提高代码的重用性

调用:

SELECT 函数名(实参列表) (实参和形参的 个数、类型 必须一致)

FROM 表(根据需要:函数的参数用到表中的字段)

过程:调用该函数,把函数的逻辑语句执行完,将它的返回值显示出来。

分类:

1.单行函数:处理数据使用。传入一个参数,处理完后,最终会有一个返回值

如:CONCAT(str1,str2,...)、LENGTH(str)、IFNULL(expr1,expr2)等

2.分组函数:简称组函数

功能:做统计使用。传入一组参数,最终返回一个值。又称为统计函数、聚合函数。

1.单行函数: 输入一行,输出也还是一行,检索一行处理一次;

2.多行函数: 输入多行数据,输出是一个结果,检索出来的数据分成组后再进行处理;

根据参数类型不同,可以分为:

字符类函数: 是专门用于字符处理的函数,处理的对象可以是字符或字符串常量,也可以是字符类型的列;

函数

说明

ascii©

返回一个字符的ASCII码,c表示一个字符

chr(i)

返回给出ASCII码值所对应的字符,i表示一个ASCII码值

concat(s1,s2)

将字符串s2连接到字符s1的后面;若s1为null,则返回s2;若s2为null,则返回s1;若s1和s2都为空,则返回null

initcap(s)

将字符串s的每个单词的第一个字母大写,其他字母小写;单词之间用空格、控制字符、标点符号来区分

instr(s1,s2[,i][,j])

返回字符串s2在字符串s1中第j次出现的位置,搜索从字符串s1的第i个字符开始;

当没有发现要查找的字符时,该函数的返回值为0;

若i为负数,则搜索将从右到左进行,但函数的返回位置还是按从左到右来计算;

s1和s2均为字符串,i和j均为整数,默认值为1

length(s)

返回字符串s的长度;若s为null,则返回值为null

lower(s)

返回字符串s的小写形式

upper(s)

返回字符串s的大写形式

ltrim(s1,s2)

删除字符串s1左边的字符串s2

rtrim(s1,s2)

删除字符串s1右边的字符串s2

trim(s1,s2)

删除字符串s1左右两端字符串s2

replace(s1,s2[,s3])

使用s3字符串替换出现在s1字符串中的所有s2字符串,并返回替换后的新字符串;s3的默认值为空字符串

substr(s,i[,j])

从字符串s的第i个位置开始截取长度为j的子字符串;若省略j,则直接截取到尾部

SHOW VARIABLES LIKE '%char%'/*显示客户端的字符集*/

#1.length获取参数长度'字节个数'

SELECTLENGTH('john');

#2.CONCAT(str1,str2,...) 拼接字符串

SELECTCONCAT(last_name,'_',first_name) AS姓名FROMemployees;

#3.upper、lower

SELECT UPPER('john');#小转大SELECT LOWER('JOHN');#大转小

#4.substr、substring截取字符串

'方法的重载名字一样,参数列表不一样'

'MySQL中的索引都是从1开始的'

'使用1个参数的,截取从指定索引处,后面的所有字符'

SELECTSUBSTR('李莫愁爱上了陆展元',7) 结果;'使用2个参数的,截取从指定索引处,指定长度的字符'

SELECTsubstr('李莫愁爱上了陆展元',1,3) 结果;

#5.instr:返回字符串中,子串的起始索引(第一次出现的地方),没有返回0

SELECT INSTR ('杨不悔殷六侠爱上了殷六侠','殷8侠') AS out_put;

#6trim去除前后的空格

SELECT LENGTH( TRIM('张翠山') )ASOUt_PUT;'去除前后的字符'

SELECT TRIM('a' FROM 'aaaaaa张aaaaaa翠山 aaaaaa') ASOUt_PUT;'如果写的是两个字符,就会被系统认为是一个单位,然后系统去匹配相应的字符'

SELECT TRIM('aa' FROM 'aaaaaaa张aaaaaa翠山 aaaaaaa') ASOUt_PUT;'以上中间的都被认为是有效的字符,不能用这个去除'

#7.lpad (‘要左填充的字符串,指定长度,指定字符’)

'字符串最终的长度就是指定的长度,超过了就会截断。后面的都不会显示'

SELECT LPAD ('殷素素',10,'*') AS OUT_PUT

#8.rpad (‘要右填充的字符串,指定长度,指定字符’)

'字符串最终的长度就是指定的长度,超过了就会截断。后面的都不会显示'

SELECT RPAD ('殷素素',12,'ab') AS OUT_PUT

#9.replace '替换(全部替换)'‘字符串,要替换的内容,替换的内容’

SELECT REPLACE('张周芷若无周芷若忌周芷若爱上了周芷若','周芷若','赵敏');

数字类函数: 主要用于执行各种数据计算,所有的数字类函数都有数字参数并返回数字值;

函数

说明

abs(n)

返回n的绝对值

ceil(n)

返回大于或等于数值n的最小整数

cos(n)

返回n的余弦值,n为弧度

exp(n)

返回e的n次幂,e=2.71828183

florr(n)

返回小于或等于n的最大整数

log(n1,n2)

返回以n1为底n2的对数

mod(n1,n2)

返回n1除以n2的余数

power(n1,n2)

返回n1的n2次方

pound(n1,n2)

返回舍入小数点右边n2位的n1的值,n2的默认值为0,这会返回小数点最接近的整数;

如果n2为负数,就舍入到小数点左边相应的位上,n2必须是整数

sign(n)

若n为负数,则返回-1;若n为正数,则返回1;若n=0,则返回0

sin(n)

返回n的正弦值,n为弧度

sqrt(n)

返回n的平方根,n为弧度

trunc(n1,n2)

返回结尾到n2位小数的n1的值,n2的默认设置为0,

当n2为默认设置时,会将n1截尾为整数,如果n2为负值,就截尾在小数点左边相应的位上

#round 四舍五入

'绝对值四舍五入,然后再去加正负号'

SELECT ROUND(-1.65);'小数点后保留几位'

SELECT ROUND(1.567,2);

#ceil 屋顶

'向上取整',返回 >=该参数的最小整数,大于里面最小的整数SELECT CEIL(-1.56);

#floor 地板

'向下取整',返回 <=该参数的最大整数,小于里面最大的整数SELECT FLOOR(-9.99);

#truncate 截断

'小数点后保留几位'

SELECT TRUNCATE(1.65,1);

#mod'取余'

SELECT MOD(-10,-3);SELECT -10%-3;'结果一样'

'被除数为正就为正,被除数为负就为负'a除b求余数

MOD (a,b) : a-a/b*b

MOD (-10,-3) : -10 - (-10 / -3) * -3 =-1

'(java中除号左右两边都为整数结果取整) 求余数的运算'

rand:获取随机数(默认返回0-1之间的小数,无限接近于1,到不了1)

区间有开区间和闭区间,其中又分为全开区间( ),全闭区间[ ],

左开右闭区间( ] 和左闭右开区间 [ ),

开区间的意思是区间两处的端点值取不到,而闭区间的端点值就可以取到。

例如区间[2,6),他是一个左闭右开的区间,

那么在这2~6之间的数字我都可以取到,而且可以取到2,但不可以取到6.

日期和时间类函数: 用于处理日期和时间的函数,可以实现计算需要的特定日期和时间;

日期类型的默认格式是“DD-MON-YY”,DD表示两位数字的“日”,MON表示3位数字的“月份”,YY表示两位数字的“年份”;

函数

说明

add_months(d,i)

返回日期d加上i个月之后的结果,i为任意整数

last_day(d)

返回包含日期d月份后的最后一天

months_between(d1,d2)

返回d1和d2之间的数目,若d1和d2的日期都相同,或者都是该月的最后一天,

则返回一个整数,否则返回的结果将包含一个小数

new_time(d1,t1,t2)

当时区t1中的日期和时间是d1时,返回时区t2中的日期和时间;d1是一个日期数据类型,t1和t2是字符串

sysdate()

返回系统当前的日期

#now

'返回系统当前日期+时间'

SELECT NOW();

#curdate

'返回系统当前日期,不包括时间'

SELECT curdate();

#curtime

'返回当前时间,不包括日期'

SELECT curtime();

#获取指定的部分:年、月、日、时、分、秒

SELECT YEAR(NOW()) 年;SELECT YEAR('1999-2-22');

SELECT YEAR(hiredate) 年FROM employees;

SELECT MONTH(NOW()) 月;

#显示英文的月份

SELECT MONTHNAME(NOW()) 月;

SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d');#c是没有0的,默认但显示日期的格式是有0的AS out_put;

#查询入职日期为1992-4-3的员工信息

SELECT

*

FROMemployeesWHEREhiredate= '1992-4-3';

#STR_TO_DATE:将日期格式的字符串 转换成指定格式的日期‘日期格式解析’

在web页面上输入的东西最终返回一个字符串

SELECT

*

FROMemployeesWHEREhiredate= STR_TO_DATE('4-3 1992','%c-%d %Y');

#date_format:将日期转换成字符串 :按照指定格式转换

SELECT DATE_FORMAT(NOW(),'%y年%m月%d日')

#查询有奖金员工和入职日期(xx月/xx日 xx年)

SELECTlast_name,DATE_FORMAT(hiredate,'%m月/%d日 %Y年') 入职日期FROMemployeesWHEREcommission_pctIS NOT NULL;

返回两个日期之间的时间。

DATEDIFF(expr1,expr2) 日期函数

参数的类型都是日期类型,用前面的减去后面的。日期的常量值用‘’单引号引起来

流程控制函数

#if函数:三元运算符

SELECT IF(expr1,expr2,expr3)条件1;成立返回2;不成立返回3SELECT IF(10>5,'大','小');

#2.case函数

使用一:switch-case的效果

java中

swich(变量表达式){case常量值:语句1;break;

.....default:语句n;break;

}

判断case的值是否相等

MySQL中

case要判断的字段或表达式when 常量1 then要显示的值1 或要显示的语句1(语句要加;号,值不用)when 常量2 then要显示的值2 或要显示的语句2

.....else(代表默认情况,不满足以上的条件时执行) 要显示的值n或语句n;end(case的结尾)

案例:查询员工的工资,要求

部门号=30,显示的工资为1.1倍

部门号=40,显示的工资为1.2倍

部门号=50,显示的工资为1.3倍

其他部门,显示的工资为原工资

SELECTsalaryAS原始工资,

department_id,CASEdepartment_idWHEN 30 THEN salary * 1.1

WHEN 40 THEN salary * 1.2

WHEN 50 THEN salary * 1.3

ELSEsalaryEND AS新工资FROMemployees;

#3.case 函数的使用二:类似于 多重if 判断区间

Java中:

if(条件1){

语句1;

}else if(条件2){

语句2;

}

...else{

语句n;

}

mysql中:

case

when 条件1 then要显示的值1或语句1(如果是true就执行,不是换下一个)when 条件2 then要显示的值2或语句2

...else要显示的值n或语句nend

案例:查询员工的工资情况

如果工资>20000,显示A级别

如果工资>15000,显示B级别

如果工资>10000,显示C级别

否则,显示D级别

SELECTsalary,CASE

WHEN salary>20000 THEN 'A'

WHEN salary>15000 THEN 'B'

WHEN salary>10000 THEN 'C'

ELSE 'D'

END AS工资级别FROM employees;

转换类函数: 用于将数据从一种类型转换为另外一种类型;

函数

说明

chartorwida(s)

该函数将字符串s转换为rwid数据类型

convert(s,aset[,bset])

该函数将字符串s由bset字符集转换为aset字符集

rowidtochar()

该函数将rowid数据类型转换为char类型

to_char(x[,format]])

该函数实现将表达式转换为字符串,format表示字符串格式

to_date(s[,format[lan]])

该函数将字符串s转换为date类型,format表示字符串格式,lan表示所使用的语言

to_number(s[,format[lan]])

该函数将返回字符串s代表的数字,返回值按照format格式进行显示,format表示字符串格式,lan表示所使用的语言

聚合类函数:用于对一组数据进行计算,并得到相应的结果;

函数

说明

avg(x[distinct/all])

计算选择列表项的平均值,列表项目可以是一个列或多个列的表达式

count(x[distinct/all])

返回查询结果中的记录数

max(x[distinct/all])

返回选择列表项目中的最大数,列表项目可以是一个列或多个列的表达式

min(x[distinct/all])

返回选择列表项目中的最小数,列表项目可以是一个列或多个列的表达式

sum(x[distinct/all])

返回选择列表项目的数值总和,列表项目可以是一个列或多个列的表达式

variance(x[distinct/all])

返回选择列表项目的统计方差,列表项目可以是一个列或多个列的表达式

stddev(x[distinct/all])

返回选择列表项目的标准偏差,列表项目可以是一个列或多个列的表达式

功能:功能:做统计使用。传入一组参数,最终返回一个值。又称为统计函数、聚合函数。简称组函数

分类:

sum 求和、avg 平均值、max 最大值、min 最小值、count 计算个数

特点:

1.sum、avg 用于处理数值类型

max、min、count 可以处理任何类型

count只计算非空的值的个数

2.以上分组函数都忽略null值

3.可以和distinct搭配实现去重的运算

4.count函数的单独介绍

一般使用count(*)统计行数

5.和分组函数一同查询的字段要求是group by后的字段,其他的都不行

1.简单的使用:

参数中直接放要操作的字段

SELECT

SUM( salary )FROMemployees;SELECT

AVG( salary )FROMemployees;SELECT

MAX( salary )FROMemployees;SELECT

MIN( salary )FROMemployees;SELECT

COUNT( salary )FROMemployees;SELECT

SUM( salary ) 和,ROUND( AVG( salary ), 2) 平均值,MAX( salary ) 最大值,MIN( salary ) 最小值,COUNT( salary ) 个数FROMemployees;

2.参数支持哪些类型

SELECT SUM(last_name),AVG(last_name) FROMemployees;#不支持字符型SELECT SUM(hiredate),AVG(hiredate) FROMemployees;#不支持日期型SELECT MAX(last_name),MIN(last_name) FROMemployees;#支持字符型SELECT MAX(hiredate),MIN(hiredate) FROMemployees;#支持日期型,数值大就大SELECT COUNT(last_name) FROMemployees;#计算非空的值SELECT COUNT(commission_pct) FROM employees;#计算非空的值

3.忽略null值

SELECT SUM(commission_pct),AVG(commission_pct),SUM(commission_pct)/35,SUM(commission_pct)/107

FROM employees;

因为null加任何值都为null,由答案已知null没有参加运算

由算式得出答案,SUM(commission_pct)/35和AVG(commission_pct)的答案相等,

所以avg也忽略了null值

SELECT MAX(commission_pct),MIN(commission_pct)FROM employees;

如果计算null值最小值那么就是null

4.和distinct搭配

SELECT SUM(DISTINCT salary),SUM(salary)FROMemployees;SELECT COUNT(DISTINCT salary),COUNT(salary)FROM employees;

count函数的详细介绍

#统计该字段非空值的个数SELECT COUNT(salary) FROMemployees;

#统计行 数,一行中只要有一个不为null就+1

SELECT COUNT(*) FROMemployees;

#count可以加常量值就相当于在表中加了一列这样的常量值统计个数SELECT COUNT(1) FROM employees;

效率:

5.5之前:MYISAM存储引擎,在这个引擎中:count(*)的效率最高,

因为在这个引擎中有个有一个计数器,直接就返回了个数

5.5开始:INNODB存储引擎,这这个引擎中:count(*)和count(1)的效率差不多,

但绝对比count(字段)要高,因为加字段需要判断,

判断该字段的值是否为null如果为null就不加1如果不为null才加1。

有一个判断的过程。

5.和分组函数一同查询的字段有限制

查询的结果要求是一个完整的表格

SELECT AVG(salary),employee_idFROM employees;

附: dual是Oracle系统内部提供的一个用于实现临时数据计算的特殊表,它只有一个列DUMMY,类型为VARCHAR2(1);

#查看数据库系统的版本号

SELECT VERSION();

#查看当前数据库

SELECT DATABASE();

#当前用户

SELECT USER();

#返回该字符的密码形式就是自动加密

password('字符串');

#返回该字符的md5加密形式

md5('字符串');

mysql里面除号写法_MySQL常见函数 - osc_mgt0rm0m的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. r如何查询mysql中的数据类型_MySQL数据类型 - osc_mgt0rm0m的个人空间 - OSCHINA - 中文开源技术交流社区...

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...

  2. mysql 任务调度_Mysql任务调度 - osc_mgt0rm0m的个人空间 - OSCHINA - 中文开源技术交流社区...

    Mysql任务调度 Event调度配置 Mysql任务调度Event不执行 Mysql任务作业Event不执行 我采用的方法就是: 方法一:找到当前使用的 .cnf 文件,在 [mysqld] 的下面 ...

  3. 空间搭建mysql环境_MySQL环境搭建 - osc_mgt0rm0m的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.安装依赖和拓展 1.安装 sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get inst ...

  4. 给mysql salve从库复制授权_MySQL主从复制 - osc_h8z06jiq的个人空间 - OSCHINA - 中文开源技术交流社区...

    MySQL主从复制 引入 MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上. MySQL数据库支持单向.双向 ...

  5. mysql主从切换机制torch_Mysql主从复制 - osc_y0vjyklt的个人空间 - OSCHINA - 中文开源技术交流社区...

    Mysql主从复制原理 1:主库开始二进制日志(binlog): 2:从库执行change master 执行主库,此时主库会创建一个dump线程,用于向从库发送二进制日志: 3.从库执行 start ...

  6. mysql双活存储容量 TB_Mysql双活方案 - osc_fted3syf的个人空间 - OSCHINA - 中文开源技术交流社区...

    #### 说明 Mysql主主互备即为两个mysql的互为备份机 ##### Windows下安装步骤(Linux下步骤类似,基本就是装上mysql,然后修改配置来完成主从的设置) - step1.下 ...

  7. MySQL安装2出现Typical_Mysql安装 - osc_c7lpn2ge的个人空间 - OSCHINA - 中文开源技术交流社区...

    以下内容较长,请仔细阅读: 1.首先进入安装界面,按"Next"继续: 2.选择Custom,有Typical(默认).Complete(全装),一般根据选择安装自己的MySQL, ...

  8. gogs mysql 报错_Gogs服务搭建 - osc_2ltf3y0p的个人空间 - OSCHINA - 中文开源技术交流社区...

    Gogs 安装教程(最简单版) 简介 Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支 ...

  9. leip与mysql数据库_性能分析方法 - osc_xm8bu282的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.性能分析的常用手段 1.空间换时间,利用内存缓存从磁盘上取出的数据,CPU可以直接访问内存,从而比从磁盘读取数据更高的效率. 2.时间换空间,当空间成为瓶颈的时候,切开数据分批次处理,用更少空间完 ...

最新文章

  1. lodop打印不显示页码_CAD上明明有图,但是打印的时候不显示怎么办?原来要这样设置...
  2. 今日头条 Go 建千亿级微服务的实践
  3. ArcGIS实验教程——实验四:数字化属性数据的采集
  4. 请推荐好的工作流产品
  5. android 开发 切图,Android开发,切图网站推荐。
  6. 算法与数据结构10.1
  7. 【图像加密】基于matlab GUI Arnold置乱图像加密解密【含Matlab源码 1239期】
  8. 实用的论文工具大盘点【建议收藏】
  9. Mac UE各版本破解方法
  10. linux 字符终端F1-F6 图形终端F7- F12 简介
  11. java翻译smali_【翻译】apk反汇编之smali语法
  12. 连载]第四讲 测量准确度、重复性、复现性及标准偏差
  13. Grunt的安装与使用 (以Windows 64位为例)
  14. 走近棒球运动·科罗拉多落基队·MLB棒球创造营
  15. 计算机行业未来20年前景,未来20年,哪个专业最有“前景“?符合一定要报
  16. 信号量优先级反转问题记录(总是遗忘)
  17. C语言逻辑类型与运算
  18. 解决input中输入中文过程中会触发input事件的问题
  19. 李梦娇口诀88条(视频+讲义)
  20. JS-DOM对象--节点--添加图片的操作

热门文章

  1. Online Judge——1003. 二哥养细菌(c++)
  2. 人到中年这种茶要多喝,越喝血管越干净!坚持一个月,头晕眼花不再来!
  3. 观战朝鲜vs巴西后,给中国足球的两点建议
  4. VMware注册问题
  5. 学生成绩等级用c语言,C语言实现学生成绩等级划分的方法实例
  6. 接口练习:猫狗案例扩展跳高功能
  7. CUDA C/C++ 从入门到入土 第一步——让你的CUDA跑起来
  8. ZJOI2019一轮游记
  9. 婴幼儿体重在线计算机,宝宝测量体重计算器
  10. 什么轴的机械键盘声音小