Oracle SQL语句中经常使用到Oracle自带的函数,这些函数丰富了SQL的语言功能,为ORACLE SQL提供了更多的操作性。Oracle函数可以接受零个或者多个输入参数,并返回一个输出结果。Oracle 数据库中主要使用两种类型的函数:
1、单行函数:对每一个函数应用在表的记录中时,只能输入一行中的列值作为输入参数(或常数),并且返回一个结果。
例如1:MOD(X,Y) 是求余函数,返回的X除以Y的余数,其中X和Y可以是列值,也可以是常数。
例如2:TO_CHAR(X,'YYYYMMDD')是时间类型转字符串的函数,其中X可以是行中某一时间类型(date)的列,也可以是一个时间类型的常数。
常用的单行函数大致以下几类:
- 字符串函数:对字符串进行操作,例如:TO_CHAR()、SUBSTR()、DECODE()等等。
- 数值函数:对数值进行计算或操作,返回一个数字。例如:ABS()、MOD()、ROUND()等等。
- 转换函数:将一种数据类型转换成另外一种类型:例如:TO_CHAR()、TO_number()、TO_DATE()等等。
- 日期函数:对时间和日期进行操作的函数。例如:TRUNC()、SYSDATE()、ADD_MONTHS()等等。
2、聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。比如 SUM(x)返回结果集中 x 列的总合。
一、Oracle字符型函数Oracle字符型函数是单行函数当中的一种,是用来处理字符串类型的函数,通过接收字符串参数,然后经过操作返回字符串结果的函数。
常用的函数如下表:
函数 | 说明 | 案例 | 结果 |
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 |
Oracle日期类型函数是操作日期、时间类型的相关数据,返回日期时间类型或数字类型结果,常用的函数有:SYSDATE()、ADD_MONTHS()、LAST_DAY()、TRUNC()、ROUND()等等。
系统日期、时间函数:
SYSDATE函数:该函数没有参数,可以得到系统的当前时间。
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
SYSTIMESTAMP函数:该函数没有参数,可以得到系统的当前时间,该时间包含时区信息,精确到微秒。
select systimestamp from dual;
数据库时区函数:
DBTIMEZONE函数:该函数没有输入参数,返回数据库时区。
select dbtimezone from dual;
给日期加上指定的月份函数:
ADD_MONTHS(r,n)函数:该函数返回在指定日期r上加上一个月份数n后的日期。其中
r:指定的日期。
n:要增加的月份数,如果N为负数,则表示减去的月份数。
select to_char(add_months(to_date('2021-11-12','yyyy-mm-dd'),1),'yyyy-mm-dd'),
to_char(add_months(to_date('2021-10-31','yyyy-mm-dd'),1),'yyyy-mm-dd'),
to_char(add_months(to_date('2021-09-30','yyyy-mm-dd'),1),'yyyy-mm-dd')
from dual;
结果:如果指定的日期是月份的最后一天,返回的也是新的月份的最后一天,如果新的月份比指定的月份日期少,将会自动调回有效日期;
月份最后一天函数:
LAST_DAY(r)函数:返回指定r日期的当前月份的最后一天日期。
select last_day(sysdate) from dual;
指定日期后一周的日期函数:
NEXT_DAY(r,c)函数:返回指定r日期的后一周的与r日期字符(c:表示星期几)对应的日期。注意:c这里的星期几只能在中文环境下使用“星期几”,否则用英文Monday星期一,Therday星期二,Wednesday星期三,Thursday星期四,Firday星期五,Saturday星期六,Sunday星期天;
#下周一是2021/12/27
select next_day(to_date('2021-12-23','yyyy-mm-dd'),'MONDAY') from dual;
返回指定日期中特定部分的函数:
EXTRACT(time)函数:返回指定time时间当中的年、月、日、分等日期部分。
select extract( year from timestamp '2021-12-23 15:36:01') as year,
extract( month from timestamp '2021-12-23 15:36:01') as month,
extract( day from timestamp '2021-12-23 15:36:01') as day,
extract( hour from timestamp '2021-12-23 15:36:01') as hour,
extract( minute from timestamp '2021-12-23 15:36:01') as minute,
extract( second from timestamp '2021-12-23 15:36:01') as second
from dual;