【10】Oracle函数

1. 函数分类

oracle 数据库中主要使用两种类型的函数:

  1. 单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果。
  2. 聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。

2. 单行函数

2.1 字符函数

字符函数的功能主要是进行字符串数据的操作。
常用的字符函数:

函数说明示例
ASCII(X)返回字符X的ASCII码SELECT ASCII(‘a’) FROM dual;
结果:97
CONCAT(X,Y)连接字符串X和YSELECT CONCAT(‘Hello’,‘world’) FROM dual;
结果:Helloworld
INSTR(X,STR[,START][,N)从X中查找str,可以指定从start开始,也可以指定从n开始SELECT INSTR(‘Hello world’,‘or’) FROM dual;
结果:8
LENGTH(X)返回X的长度select length(ename) from Emp;
查询ename的长度小于5的Emp信息:
select * from Emp where length(ename) < 5;
LOWER(X)X转换成小写select lower(‘ABC’) from dual;
结果:abc
UPPER(X)X转换成大写select upper(‘abc’) from dual;
结果:ABC
INITCAP(X)首字母大写select initcap(‘hello’) from dual;
结果: Hello
LTRIM(X[,TRIM_STR])把X的左边截去trim_str字符串,缺省截去空格
RTRIM(X[,TRIM_STR])把X的右边截去trim_str字符串,缺省截去空格
TRIM([TRIM_STR FROM]X)把X的两边截去trim_str字符串,缺省截去空格
REPLACE(X,old,new)在X中查找old,并替换成newselect replace(ename,‘A’,’’) from Emp;
select replace(replace(ename,‘A’,’
’),‘N’,’*’) from Emp;
SUBSTR(X,start[,length])返回X的字串,从start处开始,截取length个字符,缺省length,默认到结尾select substr(hiredate,0,5) from Emp;

2.2 数字函数

数字函数接受数字参数,参数可以来自表中的一列,也可以是一个数字表达式。

函数说明示例
ABS(X)X的绝对值ABS(-3)=3
ACOS(X)X的反余弦ACOS(1)=0
COS(X)余弦COS(1)=0.54030230586814
CEIL(X)大于或等于X的最小值CEIL(5.4)=6
FLOOR(X)小于或等于X的最大值FLOOR(5.8)=5
LOG(X,Y)X为底Y的对数LOG(2,4)=2
MOD(X,Y)X除以Y的余数MOD(8,3)=2
POWER(X,Y)X的Y次幂POWER(2,3)=8
ROUND(X[,Y])X在第Y位四舍五入ROUND(3.456,2)=3.46
SQRT(X)X的平方根SQRT(4)=2
TRUNC(X[,Y])X在第Y位截断TRUNC(3.456,2)=3.45

说明:

  1. ROUND(X[,Y]),四舍五入。

在缺省 y 时,默认 y=0;比如:ROUND(3.56)=4。

y 是正整数,就是四舍五入到小数点后 y 位。ROUND(5.654,2)=5.65。

y 是负整数,四舍五入到小数点左边|y|位。ROUND(351.654,-2)=400。

  1. TRUNC(x[,y]),直接截取,不四舍五入。

在缺省 y 时,默认 y=0;比如:TRUNC (3.56)=3。

Y是正整数,就是四舍五入到小数点后 y 位。TRUNC (5.654,2)=5.65。

y 是负整数,四舍五入到小数点左边|y|位。TRUNC (351.654,-2)=300。

2.3 转换函数

转换函数将值从一种数据类型转换为另外一种数据类型。常见的转换函数有:

  1. TO_CHAR(d|n[,fmt])

把日期和数字转换为制定格式的字符串。Fmt是格式化字符串

代码演示:TO_CHAR对日期的处理

SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS')"date" FROM dual;

在这里插入图片描述

  1. TO_DATE(c[,fmt[,nls]])

将char,nchar,varchar2,nvarchar2转换为日期类型,如果fmt参数不为空,则按照fmt中指定格式进行转换。注意这里的fmt参数。如果ftm为’J’则表示按照公元制(Julian day)转换,c则必须为大于0并小于5373484的正整数。
例如:

SELECT TO_DATE(2454336, 'J') FROM DUAL; 
SELECT TO_DATE('2007-8-23 23:25:00', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL; 
INSERT INTO Student ( stu_No, stu_Name, stu_Sex, stu_birthday, stu_score, 
	grade_id, createtime, status )
VALUES
	( seq_stu.nextval, '张三', '男', TO_DATE( '2019-1-9', 'yyyy-MM-dd' ), 25.36978, 
	5, DEFAULT, DEFAULT );
  1. TO_NUMBER(c[,fmt[,nls]])

将char,nchar,varchar2,nvarchar2型字串按照fmt中指定格式转换为数值类型并返回。
例如:

SELECT TO_NUMBER('-100.00', '9G999D99') FROM DUAL; 

2.4 日期函数

日期函数接受DATE类型的参数.除了MONTHS_BETWEEN函数返回的是NUMBER类型的结果,所有其他的日期函数返回的都是DATE类型的数值.

  • ADD_MONTHS

语法: ADD_MONTHS(d,x)

功能: 返回日期d加上x个月后的月份。x可以是任意整数。如果结果日期中的月份所包含的天数比d日期中的“日”分量要少。(即相加后的结果日期中的日分量信息已经超过该月的最后一天,例如,8月31日加上一个月之后得到9月31日,而9月只能有30天)返回结果月份的最后一天。

使用位置: 过程性语言和SQL语句。

  • LAST_DAY

语法:LAST_DAY(d)

功能:计算包含日期的d的月份最后一天的日期.这个函数可以用来计算当月中剩余天数.

使用位置: 过程性语言和SQL语句。

  • MONTHS_BETWEEN

语法: MONTHS_BETWEEN(date 1,date2)

功能: 计算date 1和date2之间月数.如果date 1,date2这两个日期中日分量信息是相同的,或者这两个日期都分别是所在月的最后一天,那么返回的结果是一个整数,否则包括一个小数,小数为富余天数除以31.

使用位置: 过程性语言和SQL语句。

  • NEW_TIME

语法: NEW_TIME(d,zone1,zone2)

功能: 计算当时区zone1中的日期和时间是s时候,返回时区zone2中的日期和时间. zone1和zone2是字符串.

使用位置: 过程性语言和SQL语句。

  • NEXT_DAY

语法: NEXT_DAY(d,string)

功能: 计算在日期d后满足由string给出的条件的第一天. String使用位置;当前会话的语言指定了一周中的某一天.返回值的时间分量与d的时间分量是相同的. String的内容可以忽略大小写.

使用位置: 过程性语言和SQL语句。

  • ROUND

语法: ROUND(d[,format])

返回一个以 fmt 为格式的四舍五入日期值, d 是日期, fmt 是格式

模型。默认 fmt 为 DDD,即月中的某一天。

① 如果 fmt 为“YEAR”则舍入到某年的 1 月 1 日,即前半年舍去,后半年作为下一年。
② 如果 fmt 为“MONTH”则舍入到某月的 1 日,即前月舍去,后半月作为下一月。
③ 默认为“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作为第二天。
④ 如果 fmt 为“DAY”则舍入到最近的周的周日,即上半周舍去,下半周作为下一周周日。

例:

SELECT SYSDATE,ROUND(SYSDATE),ROUND(SYSDATE,'day'),
ROUND(SYSDATE,'month'),ROUND(SYSDATE,'year') FROM dual;

在这里插入图片描述

  • SYSDATE

语法: SYSDATE

功能: 取得当前的日期和时间,类型是DATE.它没有参数.但在分布式SQL语句中使用时,SYSDATE返回本地数据库的日期和时间.

使用位置: 过程性语言和SQL语句。

  • TRUNC

语法: TRUNC(d,format)

功能: 计算截尾到由format指定单位的日期d.可以使用位置:格式和效果.缺省参数同ROUNG.

使用位置: 过程性语言和SQL语句。

- EXTRACT(fmt FROM d),提取日期中的特定部分。

fmt 为:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中 YEAR、MONTH、DAY可以为 DATE 类型匹配,也可以与 TIMESTAMP 类型匹配;但是 HOUR、MINUTE、SECOND 必须与 TIMESTAMP 类型匹配。

HOUR 匹配的结果中没有加上时区,因此在中国运行的结果小 8 小时。

例:

   SELECT SYSDATE "date",
   EXTRACT(YEAR FROM SYSDATE)"year",
   EXTRACT(MONTH FROM SYSDATE)"month",
   EXTRACT(DAY FROM SYSDATE)"day",
   EXTRACT(HOUR FROM SYSTIMESTAMP)"hour",
   EXTRACT(MINUTE FROM SYSTIMESTAMP)"minute",
   EXTRACT(SECOND FROM SYSTIMESTAMP)"second"
   FROM dual;

在这里插入图片描述

2.5 其他单行函数

1、NVL(X,VALUE)

如果X为空,返回value,否则返回X

例:对工资是2000元以下的员工,如果没发奖金,每人奖金100元

代码演示:NVL函数

SQL> SELECT ENAME,JOB,SAL,NVL(COMM,100) FROM EMP WHERE SAL<2000;

ENAME JOB SAL NVL(COMM,100)

SMITH CLERK 800 100

ALLEN SALESMAN 1600 300

WARD SALESMAN 1250 500

MARTIN SALESMAN 1250 1400

TURNER SALESMAN 1500 50

ADAMS CLERK 1100 100

JAMES CLERK 950 100


7 rows selected

2、NVL2(x,value1,value2)

如果x非空,返回value1,否则返回value2

例:对EMP表中工资为2000元以下的员工,如果没有奖金,则奖金为200元,如果有奖金,则在原来的奖金基础上加100元

代码演示:NVL2函数

SQL> SELECT ENAME,JOB,SAL,NVL2(COMM,comm+100,200) "comm" FROM EMP WHERE SAL<2000;

ENAME JOB SAL comm

SMITH CLERK 800 200

ALLEN SALESMAN 1600 400

WARD SALESMAN 1250 600

MARTIN SALESMAN 1250 1500

TURNER SALESMAN 1500 150

ADAMS CLERK 1100 200

JAMES CLERK 950 200

MILLER CLERK 1300 200


8 rows selected

3. 聚合函数

聚合函数同时对一组数据进行操作,返回一行结果,比如计算一组数据的总和,平均值

等。

名称作用语法
AVG平均值AVG(表达式)
SUM求和SUM(表达式)
MIN最小值MIN(表达式)
MAX最大值MAX(表达式)
COUNT数据统计COUNT(表达式)

例:求本月所有员工的基本工资总和

代码演示:sum函数

SQL> SELECT SUM(sal) FROM emp;


SUM(SAL)

29025

例:求不同部门的平均工资

代码演示:AVG函数下的分组查询

SQL> SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO;


DEPTNO AVG(SAL)


30 1566.66666

20 2175

10 2916.66666

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值