数据库的函数

目录

一、函数分类

二、内置函数

单行函数-字符函数

1.length函数

2.concat、substr、upper、lower函数

3.instr函数

4.trim

5.lpad和rpad

6.replace

7.stuff

单行函数-数字函数

1.round函数

2.floor和ceil函数

3.truncate函数

4.mod函数

5.ceiling函数

单行函数-日期函数

1.now、curdate、curtime函数

2.获取指定部分的年、月、日、分钟、秒

3.str_to_date、date_format函数

4.字符串类型转日期类型

5.对日期类型操作

单行函数-其他函数

1.version、datebase、user函数

单行函数-流程控制函数

1.if函数

2.case函数

分组(聚集、聚合)函数

1.sum函数

2.avg函数

3.min函数

4.max函数

5.count函数

三、用户自定义函数

1.分类:标量值函数、表格值函数

2.标量值函数

3.表格值函数

1)内联-表格值函数

2)多-表格值函数

4.执行

5.修改

6.查看自定义函数源代码


一、函数分类

数据库函数分为:内置函数、用户自定义函数。

内置的函数分为:单行函数、分组函数(又称统计函数、聚集函数、聚合函数)。

【单行函数又分为:字符函数、数学函数、日期函数、其他函数、流程控制函数】

二、内置函数

单行函数-字符函数

1.length函数

select length(name) from 表名; //查询名字的长度

2.concat、substr、upper、lower函数

2.1 substr表示截取索引(含索引)(索引从1开始数)和后面全部字符

例子1:select substr('你好呀小朋友',4); //返回 ‘小朋友‘

例子2:select substr('你好呀小朋友',1,2) // 返回’你好‘

2.2 upper变大写,lower变小写

2.3 concat、substr、upper、lower例子

select concat(upper(substr(name,1,1)),lower(substr(name,2))) as 姓名 from 表名; ——“StEVEN” //如果name是sTEVEN

concat( 'ste' , 'ven') ——“steven”

3.instr函数

返回子串第一次出现的索引(索引从1开始数),如果找不到返回0

例子:select instr('你好呀小朋友',’小朋友‘);//返回4

4.trim

(1)trim

去除左右两边的空格或指定字符

select trim(' 张三 '); //返回张三

select trim('a' from 'aaaa张三aaa'); //返回张三

select trim ('s' from name) from 表名; //将返回所有记录的name属性去掉's'后的结果

返回结果


trim('s' from name)


even

jack

mike

ally

(2)ltrim

ltrim()——去除左边的空格                    ——“steven      ”

(3)rtrim

rtrim()——去除右边的空格                    ——“      steven”

5.lpad和rpad

lpad用指定字符实现左填充指定长度

例子:select lpad('小霸王',10,’*‘); //返回'********小霸王''(用'*'在左边填充至总共10个字符)

rpad右填充

例子:select lpad(name,10,’ab‘) as result from 表名; //返回所有记录的name属性右边填充ab至总共10个字符

返回结果


result


stevenabab

jackababab

6.replace

用参数三替换参数一中的参数二

例子1:select replace('你好呀小朋友','小朋友','大人'); //返回'你好呀大人'

例子2:select repalce(name,'even','老爷爷')as 替换结果 from 表名;

返回结果


替换结果


st老爷爷 【替换前是steven】

jack

mike

7.stuff

stuff(“一二三四五”,3,2,“ABCDE”) //源字符串——“一二三四五”,待插入字符串——“ABCDE”

/** 3代表从“源字符串”第3个字符之前(也就是'二'到'三')插入“待插入字符串”,2代表(从第3个字符之后,也就是‘三’之后)删除2个字符*/

步骤:

1) 在‘三’之后删2个。删除'四'、'五'

2) 在'二'到'三'之间插入,插入“ABCDE”

结果:

“一二ABCDE三”

单行函数-数字函数

1.round函数

四舍五入

例子1:select round(1.8);//返回2

例子2:select round(1.568,2);//第二个参数2表示小数点后保留2位,返回1.57

2.floor和ceil函数

floor向下取整

例子:select floor(1.94); //返回1

ceil向上取整

例子:select ceil(1.02); //返回2

3.truncate函数

截断

例子:select truncate(1.6999,1); //第二个参数1表示小数点后保留1位小数,返回1.6

4.mod函数

取余

例子:select mod(10,3); //和select 10%3;是一样的结果

5.ceiling函数

select ceiling(3.1);  //返回大于该数的最小整数,该数是整数就返回它自己。返回4

单行函数-日期函数

1.now、curdate、curtime函数

select now(); //返回当前系统的日期+时间

select curdate(); //返回当前的系统日期

select curtime(); //返回当前系统的时间

2.获取指定部分的年、月、日、分钟、秒

select year(now()); //返回2021

select month(now()); //返回2

select day(now()); //返回10

select minute(now()); //返回当前分钟数

select second(now()); //返回当前秒数

3.str_to_date、date_format函数

3.1 str_to_date:将指定格式的日期字符串转换成日期

%Y:四位的年份

%y:2位的年份

%m:月份(01、02、03....)

%c:月份(1、2、3....)

%d:日(01、02、03....)

%w 一个星期中的天数(0=sunday ……6=saturday )

%H:小时(24小时制)

%h:小时(12小时制)

%i:分钟

%s:秒

例子1:select str_to_date(‘5-30 1995’,'%m-%d %Y'); //返回日期1995-05-30

例子2:select str_to_date('5-30 1995 14-05-21','%m-%d %Y %H-%i-%s'); //返回日期+时间1995-05-30 14:05:21

3.2 date_format:将日期转换成指定格式的字符串

例子1:select date_format(now(),'%Y年%m月%d日'); //返回2021年2月10日

4.字符串类型转日期类型

数据库有这几种日期日期类型:
DATE             --仅包含日期值(如:"2022-07-01")
TIME             --仅包含时间值(如:"15:30:00")
DATETIME         --同时包含日期和时间值(如:"2022-07-01 15:30:00")
TIMESTAMP        --同时包含日期和时间值,但范围更广(支持1970年1月1日以后的任何日期时间)

date('2022-4-15 12:30:48')       //将转为2022-04-15格式的DATE类型

5.对日期类型操作

获取year、month、day:year(日期类型)、month(日期类型)、day(日期类型)

加减时间:

ADDDATE(date,interval expr type)

DATE_ADD(date,interval expr type)

SUBDATE(date,interval expr type)

DATE_SUB(date,interval expr type)

adddate('2022-4-15 13:30:28',interval '3 1:2' day_minute);2022-04-18 14:32:28
adddate('2022-4-1',interval 5 day);2022-04-06

单行函数-其他函数

1.version、datebase、user函数

select version(); //查询数据库版本

select database(); //查询当前use的database

select user(); //查询当前使用数据库的用户

select now(); //查询当前时间(日期+时间)

单行函数-流程控制函数

1.if函数

语法:if( 判断语句返回boolean,输出1【true】,输出2【false】);

例子:select id,name,if( id<=2,'id小于等于2','id大于2') as 备注 from 表名;

返回结果:


id ——name——备注


1——steven——id小于等于2

2 ——Jack——  id小于等于2

3 ——mike——  id大于2

4 ——Sally——  id大于2

2.case函数

语法:

case 要判断的字段或表达式

when 常量1或条件1 then 要显示的值或语句1

when 常量2或条件2 then 要显示的值或语句2

.....

else 要显示的值n或语句n //如果没有else的情况就省略else

end

例子1:

题目要求:判断id,要求id为1时显示“我是”+学生姓名,id为3时显示“我的名字叫”+姓名,id为其他则显示"my name is"+姓名。

select id,

case id

when 1 then concat('我是',name)

when 3 then concat('我的名字叫',name)

else concat(''my name is",name)

end

as 个人介绍 from 表名;

返回结果


id ——个人介绍


1 ——我是steven

2 ——my name is jack

3 ——我的名字叫mike

4 ——my name is sally

例子2:

查询学生的id、姓名和分组。分组如下:如果1

select id,name

case

when id>=1 and id

when id=3 then 'B组'

else 'C组'

end

as 小组 from 表名;

返回结果


id——name——小组


1——steven ——A组

2 ——jack ———A组

3 ——mike ——--B组

4 ——sally ——--C组

分组(聚集、聚合)函数

sum、avg、min、max、count函数

1)共同点:都忽略null值;

2)可以和distinct搭配使用

例子1:select sum(distinct age) from 表名;

例子2:select count(distinct age) from 表名;

1.sum函数

求和

例子:select sum(age) from 表名; //忽略null值,null不参与运算

2.avg函数

求平均值

例子:select avg(age) from 表名; //忽略null值,如果有一个人age为null,则共四个人只除以3

3.min函数

求最小值

例子:select min(age) from 表名;

4.max函数

求最大值

例子:selectmax(age) from 表名;

5.count函数

统计个数

例子:select count(name) from 表名; //返回4,说明一共有4个人(需要说明的是如果name中有含 null的人,则不统计。比如说4个人中有一个name为null,则count(name)只返回3)

补充说明:

count函数还用count(*)来统计行数,即使个别字段含有null,都能统计上,只要存有一个字段不为null就行,如:select count(*) from 表名;

#注意:count(*)和count(1)是一样,都统计包含null在内的所有列;count(列名)统计不包含null值的列

分析函数+开窗函数(窗口函数、OLAP函数)

1.作用

分析分组查询出的每一组数据

2.(分析函数+开窗函数)、与聚合函数的不同之处

聚合函数用group by分组,每个分组返回一个统计值;

开窗函数采用partition by 分组,每个分组、每一行,都可以返回一个统计值

3,.语法

分析函数名() OVER(分析子句)

分析函数:

可以是:聚合函数、ROW_NUMBER、RANK、DENSE_RANK、LAG、LEAD、first_value、last_value

开窗函数:

OVER(分析子句)

分析子句

分析子句则指定了分组的规则和排序的方式

内容是:【分组】partition by  xxxxxxx 【排序】order by xxxxxx 【窗口】rows between 参数1 and 参数2

窗口子句不能单独出现,必须有order by 子句时才能出现。而出现order by 子句的时候,不一定要有窗口子句

关于【窗口】rows between后面跟的参数可以是:

current row:当前行

n preceding:往前统计n行

unbounded preceding:不限往前的范围

n following:往后统计n行

unbounded following:不限往后的范围

三、用户自定义函数

1.分类:标量值函数、表格值函数

2.标量值函数

定义:RETURNS 子句返回一种标量数据类型

Create function 函数名(传入参数名1 参数类型1,传入参数名2 参数类型2)

Returns 返回值数据类型

As

begin

SQL语句 Return 返回的一个变量或值

End

3.表格值函数

分类:内联表格值函数(内嵌表值函数、行内函数)、多句表格值函数(多语句函数)

1)内联-表格值函数

定义:

Create function 函数名(传入参数名1 参数类型1,传入参数名2 参数类型2)

Returns Table

As

Return (一条sql语句)/**查询出来是多条记录,即一张表,即table*/

修改:

alter function 函数名(参数)

returns table

as

return (修改后的一条SQL语句)

2)多-表格值函数

4.执行

select * from 自定义函数名(参数值1,参数值2);

5.修改

语法:alter function 属性;


属性有哪些?
NO SQL ——不含SQL
CONTAINS SQL ——含 SQL,不读、写数据
READS SQL DATA ——要读
MODIFIES SQL DATA ——要写
SQL SECURITY { DEFINER |INVOKER } ——指明谁有权限执行

  • DEFINER——只有定义者能执行
  • INVOKER——调用者都可以执行

COMMENT '注释内容'——添加注释信息

6.查看自定义函数源代码

exec sp_helptext '函数名';

你可能感兴趣的:(数据库基础,数据库,mysql,sql,oracle)