Oracle函数

1、单行函数:对每一个函数应用在表的记录中时,只能输入一行中的列值作为输入参数(或常数),并且返回一个结果。
2、聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。比如 SUM(x)返回结果集中 x 列的总合。

字符型函数

函数 说明 案例 结果
ASCII(X) 求字符X的ASCII码 select ASCII(‘A’) FROM DUAL; 65
CHR(X) 求ASCII码对应的字符 select CHR(65) FROM DUAL; ‘A’
LENGTH(X) 求字符串X的长度 select LENGTH(‘ORACLE技术圈’)from DUAL; 9
CONCATA(X,Y) 返回连接两个字符串X和Y的结果 select CONCAT(‘ORACLE’,’技术圈’) from DUAL; ORACLE技术圈
INSTR(X,Y[,START]) 查找字符串X中字符串Y的位置,可以指定从Start位置开始搜索,不填默认从头开始 SELECT INSTR(‘ORACLE技术圈’,’技术’) FROM DUAL; 7
LOWER(X) 把字符串X中大写字母转换为小写 SELECT LOWER(‘ORACLE技术圈’) FROM DUAL; oracle技术圈
UPPER(X) 把字符串X中小写字母转换为大写 SELECT UPPER(‘Oracle技术圈’) FROM DUAL; ORACLE技术圈
INITCAP(X) 把字符串X中所有单词首字母转换为大写,其余小写。 SELECT INITCAP(‘ORACLE is good ‘) FROM DUAL; Oracle Is Good
LTRIM(X[,Y]) 去掉字符串X左边的Y字符串,Y不填时,默认的是字符串X左边去空格 SELECT LTRIM(‘—ORACLE技术圈’,’-‘) FROM DUAL; ORACLE技术圈
RTRIM(X[,Y]) 去掉字符串X右边的Y字符串,Y不填时,默认的是字符串X右边去空格 SELECT RTRIM(‘ORACLE技术圈—‘,’-‘) FROM DUAL; ORACLE技术圈
TRIM(X[,Y]) 去掉字符串X两边的Y字符串,Y不填时,默认的是字符串X左右去空格 SELECT TRIM(‘—ORACLE技术圈—‘,’-‘) FROM DUAL; ORACLE技术圈
REPLACE(X,old,new) 查找字符串X中old字符,并利用new字符替换 SELECT REPLACE(‘ORACLE技术圈’,’技术圈’,’技术交流’) FROM DUAL; ORACLE技术交流
SUBSTR(X,start[,length]) 截取字符串X,从start位置(其中start是从1开始)开始截取长度为length的字符串,length不填默认为截取到字符串X末尾 SELECT SUBSTR(‘ORACLE技术圈’,1,6) FROM DUAL; ORACLE
RPAD(X,length[,Y]) 对字符串X进行右补字符Y使字符串长度达到length长度 SELECT RPAD(‘ORACLE’,9,’-‘) from DUAL; ORACLE—-
LPAD(X,length[,Y]) 对字符串X进行左补字符Y使字符串长度达到length长度 SELECT LPAD(‘ORACLE’,9,’-‘) from DUAL; —-ORACLE

日期型函数

常用的函数有:SYSDATE()、ADD_MONTHS()、LAST_DAY()、TRUNC()、ROUND()等等。

sysdate

该函数没有参数,可以得到系统的当前时间

  1. select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
SYSTIMESTAMP函数

该函数没有参数,可以得到系统的当前时间,该时间包含时区信息,精确到微秒。

  1. select systimestamp from dual;
DBTIMEZONE函数

DBTIMEZONE函数:该函数没有输入参数,返回数据库时区。

  1. select dbtimezone from dual;
ADD_MONTHS (r,n) 函数

该函数返回在指定日期r上加上一个月份数n后的日期。其中r:指定的日期。n:要增加的月份数,如果N为负数,则表示减去的月份数。

  1. select to_char(add_months(to_date('2018-11-12','yyy-mm-dd'),1)'yyy-mm-dd),to_char(add_months(to_date('2018-10-31','yyyy-mm-dd'),1),'yyyy-mm-dd'), to_char(add_months(to_date('2018-09-30','yyyy-mm-dd'),1),'yyyy-mm-dd') from dual;
LAST_DAY(r)函数

返回指定r日期的当前月份的最后一天日期。

  1. select last_day(sysdate) from dual;
NEXT_DAY(r,c)函数

返回指定R日期的后一周的与r日期字符(c:表示星期几)对应的日期。

  1. select next_day(to_date('2018-11-12','yyyy-mm-dd'),'星期四') from dual;

EXTRACT(time)函数

返回指定time时间当中的年、月、日、分等日期部分。

  1. select extract( year from timestamp '2018-11-12 15:36:01') as year,
  2. extract( month from timestamp '2018-11-12 15:36:01') as month,
  3. extract( day from timestamp '2018-11-12 15:36:01') as day,
  4. extract( minute from timestamp '2018-11-12 15:36:01') as minute,
  5. extract( second from timestamp '2018-11-12 15:36:01') as second
  6. from dual;

结果:

MONTHS_BETWEEN(r1,r2)函数

该函数返回r1日期和r2日期之间的月份。当r1>r2时,返回的是正数,假如r1和r2是不同月的同一天,则返回的是整数,否则返回的小数。当r1<r2时,返回的是负数。

  1. select months_between(to_date('2018-11-12', 'yyyy-mm-dd'),
  2. to_date('2017-11-12', 'yyyy-mm-dd')) as zs, --整数
  3. months_between(to_date('2018-11-12', 'yyyy-mm-dd'),
  4. to_date('2017-10-11', 'yyyy-mm-dd')) as xs, --小数
  5. months_between(to_date('2017-11-12', 'yyyy-mm-dd'),
  6. to_date('2018-10-12', 'yyyy-mm-dd')) as fs --负数
  7. from dual;

TRUNC(r[,f])函数

将日期r按f的格式进行截取。如果f不填,则截取到当前的日期。

  1. select sysdate, --当前时间
  2. trunc(sysdate, 'yyyy') as year, --按年
  3. trunc(sysdate, 'mm') as month, --按月
  4. trunc(sysdate, 'dd') as day, --按天
  5. trunc(sysdate) as mr_day, --默认不填按天
  6. trunc(sysdate, 'hh24') as hour --按小时
  7. from dual;

Oracle数值型函数

Oracle数值型函数可以是输入一个数值,并返回一个数值的函数,我们经常用到函数如下表:

函数 解释 案例 结果
ABS(X) 求数值X的绝对值 select abs(-9) from dual; 9
COS(X) 求数值X的余弦 select cos(1) from dual; 0.54030230586814
ACOS(X) 求数值X的反余弦 select acos(1) from dual; 0
CEIL(X) 求大于或等于数值X的最小值 select ceil(7.8) from dual; 8
FLOOR(X) 求小于或等于数值X的最大值 select floor(7.8) from dual; 7
log(x,y) 求x为底y的对数 select log(2,8) from dual; 3
mod(x,y) 求x除以y的余数 select mod(13,4) from dual; 1
power(x,y) 求x的y次幂 select power(2,4) from dual; 16
sqrt(x) 求x的平方根 select sqrt(16) from dual; 4
round(x[,y]) 求数值x在y位进行四舍五入。y不填时,默认为y=0;当y>0时,是四舍五入到小数点右边y位。当y<0时,是四舍五入到小数点左边 y 的绝对值位。 select round(7.816, 2), round(7.816), round(76.816, -1) from dual; 7.82 / 8 / 80
trunc(x[,y]) 求数值x在y位进行直接截取y不填时,默认为y=0;当y>0时,是截取到小数点右边y位。当y<0时,是截取到小数点左边y的绝对值位。 select trunc(7.816, 2), trunc(7.816), trunc(76.816, -1) from dual; 7.81 / 7 / 70

Oracle转换函数

Oracle转换函数是进行不同数据类型转换的函数,是我们平常数据库开发过程当中用的最多的内置函数。常用的函数有to_char()、to_number()、to_date()等等。详细分析如下表:

函数 解释 案例 结果
asciistr(x) 把字符串x转换为数据库字符集对应的ASCII值 select asciistr(‘Oracle技术圈’) from dual; Oracle\6280\672F\5708
bin_to_num(x1[x2…]) 把二进制数值转换为对应的十进制数值 select bin_to_num(1,0,0) from dual; 4
cast(x as type) 数据类型转换函数,该函数可以把x转换为对应的type的数据类型,基本上用于数字,字符,时间类型安装数据库规则进行互转, select cast(‘123’ as number) num,cast(123 as varchar2(3)) as ch,cast(to_date(‘20181112’,’yyyymmdd’) as varchar2(12)) as time from dual; 123/‘123’/12-11月-18(三列值,用”/“隔开)
convert(x,d_chset[,r_chset]) 字符串在字符集间的转换函数,对字符串x按照原字符集r_chset转换为目标字符集d_chset,当r_chset不填时,默认选择数据库服务器字符集。 select CONVERT(‘oracle技术圈’,’US7ASCII’,’ZHS16GBK’) from dual; oracle???
to_char(x[,f]) 把字符串或时间类型x按格式f进行格式化转换为字符串。 select to_char(123.46,’999.9’) from dual;select to_char(sysdate,’yyyy-mm-dd’) from dual; 123.5 2018-11-13
to_date(x[,f]) 可以把字符串x按照格式f进行格式化转换为时间类型结果。 select to_date(‘2018-11-13’,’yyyy-mm-dd’) from dual; 2018/11/13
to_number(x[,f]) 可以把字符串x按照格式f进行格式化转换为数值类型结果。 select to_number(‘123.74’,’999.99’) from dual 123.74

提醒:其中数值的格式f可以参考下表:

参数 示例 说明
9 999 指定位置返回数字
. 99.9 指定小数点的位置
99,9 指定位置返回一个逗号
$ $99.9 指定开头返回一个美元符号
EEEE 9.99EEEE 指定科学计数法

Oracle聚合函数

Oracle聚合函数同时可以对多行数据进行操作,并返回一个结果。比如经常用来计算一些分组数据的总和和平均值之类,常用函数有AVG()、SUM()、MIN()、MAX()等等。

AVG函数

AVG([distinct ] expr):该函数可以求列或列组成的表达式expr的平均值,返回的是数值类型。其中 distinct是可选参数,表示是否去掉重复行。

  1. select * from stuinfo;
  2. select avg(t.age) from stuinfo t;

使用该函数和其他聚合函数时,都可以和where条件语句和分组GROUP BY 查询组合使用,得到特定的结果。

COUNT函数

count(|[distinct]expr)函数可以用来计算查询结果的条数或行数。函数中必须指定列名或者表达式expr,不然就要全选使用号。

MAX/MIN函数

MAX([distinct] expr)、MIN([distinct] expr)函数可以返回指定列或列组成的表达式expr中的最大值或最小值。该函数也通常和where条件、group by分组结合在一起使用。

SUM函数

SUM([distinct] expr)函数可以对指定列或列组成的表达式expr进行求和,假如不使用分组group by ,那就是按照整表作为一个分组。

文档更新时间: 2020-10-20 10:23   作者:张尚