Oracle常用函数解析


Oracle已经内建了许多函数,不同的函数有不同的作用和用法,有的函数只能作用在一个记录行上,有的能够作用在多个记录行上,不同的函数可能处理不同的数据类型。常见的有两类,单行函数和分组函数 。

单行函数:  

字符函数  LPAD(<c1>,<i>[,<c2>])  在字符串c1的左边添加字符串c2直到c1字符串的长度等于i。 

SELECT  LPAD(‘Hello!’,8,’ ’) leftpad,RPAD(‘Hello!’,8,’ ’) rightpad FROM DUAL; 

 

RPAD(<c1>,<i>[,<c2>])    在字符串c1的右边添加字符串c2直到c1字符串的长度等于i。 


LOWER(<c1>)                   把字符串c1转换为小写 

UPPER(<c1>)                    把字符串c1转换为大写 

INITCAP(<c1>)                  把c1字符串的每一个单词的第一个字母转换成大写字母 

LENGTH(<c1>)                 返回字符串c1的长度 

 SELECT LENGTH('How are you') FROM DUAL; 


SUBSTR(<c1>,<i>[,<j>])  返回字符串c1中从第i个位置开始的j个字符(向右)。如果省略j,则返回c1中从第i个位置开始的所有字符。如果j为负,则返回字符串c1中从第i个位置开始的j个字符(向左)。 

SELECT SUBSTR(‘Hello,World’,1,5) FROM DUAL;  

INSTR(<c1>,<c2>[,<i>[,<j>]])  在c1中从位置i开始查找c2在c1中出第j次的位置,i可以为负(此时,从c1的尾部开始)。 

SELECT INSTR(‘Mississippi’,'i’,-2,3) FROM DUAL; 返回结果2

SELECT INSTR('Mississippi','i',3,3) FROM DUAL; 返回结果11。


LTRIM(<c1>,<c2>)  从c1前面开始去掉出现在c2的中任何前导字符集。 

SELECT LTRIM(‘Mississippi’,’Mis’) FROM DUAL; 返回结果’ppi’。

SELECT RTRIM(‘Mississippi’,’ip’) FROM DUAL; 返回结果’Mississ’。


RTRIM(<c1>,<c2>)  从c1后面开始去掉出现在c2的中任何前导字符集。 
数学函数  ABS(<n>)  返回n的绝对值 

SELECT ABS(-2),ABS(2) FROM DUAL; 返回结果 2,2。  

 

ROUND(<n1>,<n2>)  将n1的小数点后保留n2位(四舍五入)并返回。如果n2小于零,n1舍入到小数点左边。 

SELECT ROUND(12345.678,-2), ROUND(12345.678,2)  FROM  DUAL; 

分别返回结果:12300,12345.68。


CEIL(<n>)  将n 向上取整,并返回。 

 SELECT CEIL(5.1),CEIL(-21.4) FROM  DUAL;    分别返回:6, -21。 


 
FLOOR(<n>)  将n 向下取整,并返回。 

SELECT FLOOR(5.1),FLOOR(-21.4) FROM  DUAL;    分别返回:5, -22。 


 
MOD(<n1>,<n2>)  返回n1模n2后的余数。 

SELECT MOD(14,5),MOD(8,25),MOD(-64,7) FROM DUAL;       分别返回结果:4,0.5,-1。 


 
SIGN(<n>)  符号函数,n>0,返回1;n<0,返回-1;n=0,返回0。 

 

SELECT SIGN(-2.3),SIGN(2.3),SIGN(0) FROM DUAL;     返回-1,1,0。


 
SQRT(<n>)  返回n的平方根  SELECT SQRT(9) FROM DUAL; 
TRUNC(<n1>,<n2>)  功能类似ROUND函数。但不做四舍五入。 

SELECT TRUNC(123.456,2),TRUNC(123.456,-1) FROM DUAL;分别返回结果:123.45、120。 


 
 
VSIZE(n)  返回数字n的存储字节  SELECT VSIZE(123) FROM DUAL;  返回3。
日期函数(日期可以进行算术运算)  SYSDATE  返回相同日期  SELECT SYSDATE FROM DUAL; 
ADD_MONTHS(<d>,<i>)  返回日期d 加上i个月后的新日期(i正可负)。 

SELECT SYSDATE,ADD_MONTHS(SYSDATE,2) FROM DUAL; 返回2012/7/16 11:30:47,2012/9/16 11:30:47


 
 
LAST_DAY(<d>)  返回日期d所在的月的最后一天。  SELECT SYSDATE,LAST_DAY(SYSDATE) FROM DUAL 
MONTHS_BETWEEN(<d1>,<d2>)  返回日期d1比d2大多少月数。  SELECT MONTHS_BETWEEN(’19-Dec-1999’,’19-Mar-2000’ FROM DUAL; 
NEW_TIME(<d>,<tz1>,<tz2>)  将时区tz1的时间d,转换为时区tz2里的时间。  SELECT SYSDATE,NEW_TIME(SYSDATE,’CDT’,’PDT’) FROM DUAL; 
NEXT_DAY(<d>,<dow>)  返回日期d后的第一个dow。(dow:day of week)  SELECT NEXT_DAY(SYSDATE,’Monday’) FROM DUAL; 
常用转换函数  TO_CHAR(<x>[,<fmt>[,<nlsparm>]])  将x转换成字符串。(参数含义请看ORACLE的联机帮助)  SELECT TO_CHAR(SYSDATE,’YYYY-MM-DD’) FROM DUAL; 
TO_NUMBER(<c>[,<fmt>[,<nlsparm>]])  将字符串c转换成数字。(参数含义请看ORACLE的联机帮助)  SELECT TO_NUMBER(‘123’) FROM DUAL; 
TO_DATE(<c>[,<fmt>[,<nlsparm>]])

(常见的日期格式请查联机帮助。)
 将字符串c转换成日期。  SELECT TO_DATE(’19-Mar-99’,’DD-Mon-YYYY’) FROM DUAL; 
两个重要函数  DECODE(<x>,<m1>,<r1>[,<m2>,

<r2…>][,<d>])

(DECODE函数功能非常强大,请仔细玩味。)

 
 一个功能非常强大的函数,它使得SQL非常高效。它的功能类似于一系列的if…then…else语句。  SELECT sid,serial#,username,

DECODE(command

,0,’None’

,2,’Insert’

,3,’Select’

,6,’Update’

,7,’Delete’

,8,’Drop

,’Other’) cmd

FROM V$SESSION WHERE type<>’BACKGROUND’;

 
 
NVL(x1,x2)

注意ORACLE中的NULL值,注意该函数作用

 
 如果x1为空返回x2,否则返回x1。  SELECT NVL(ename,’无姓名’)  FROM  EMP; 
分组函数
 
   AVG([{DISTINCT|ALL}]<n>)  求返回行的指定列的平均值  SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal)

FROM SCOTT.EMP;

 
 
COUNT({*|[DISTINCT|ALL]}<x>)  统计返回的行数  SELECT COUNT (*), COUNT(DISTINCT mgr),COUNT(mgr)

FROM SCOTT.EMP

 
 
MAX([{DISTINCT|ALL}]<x>)  求返回行的指定列的最大值  SELECT MAX(sal),MAX(DISTINCT sal) FROM EMP; 
MIN([{DISTINCT|ALL}]<x>)  求返回行的指定列的最小值  SELECT MIN(sal),MIN(DISTINCT sal) FROM EMP; 
STDDEV([{DISTINCT|ALL}]<x>)  求返回行的指定列的标准方差  SELECT STDDEV(sal),STDDEV(DISTINCT sal) FROM EMP; 
SUM()  求返回行的指定列的和  SELECT SUM(sal) FROM EMP; 
VARIANCE()  求返回行的指定列的差异值   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值