Oracle中最常用的函数

本文深入探讨了Oracle数据库中单行函数和分组函数的使用方法,包括字符函数、数学函数、日期函数等。通过具体示例展示了如何在SQL查询中灵活运用这些函数来处理不同类型的数据,提升数据操作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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转换为小写SELECT LOWER(ename) one,UPPER(ename) two, INITCAP(ename)FROM EMP;
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’,3,3)FROM DUAL; 返回结果11。

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

 

LTRIM(<c1>,<c2>) 从c1前面开始去掉出现在c2的中任何前导字符集。 SELECTLTRIM(‘Mississippi’,’Mis’)FROM DUAL; 返回结果’ppi’。

SELECT RTRIM(‘Mississippi’,’ip’)FROM DUAL; 返回结果’Mississ’。
 
RTRIM(<c1>,<c2>) 从c1后面开始去掉出现在c2的中任何前导字符集。
数学函数
ABS(<n>) 返回n的绝对值SELECT ABC(-2),ABS(2)FROM DUAL;
ROUND(<n1>,<n2>) 将n1的小数点后保留n2位(四舍五入)并返回。如果n2小于零,n1舍入到小数点左边。 SELECTROUND(12345.678,-2),

ROUND(12345.678,2)

FROM DUAL;

分别返回结果:
1230012345.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;

分别返回结果:
40.5-1

 

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

n
<0,返回-1

n
=0,返回0。

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

分别返回结果:
123.45120

 

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

ADD_MONTHS(SYSDATE,
-2)

FROM DUAL;

 

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-2000FROM 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:dayof 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$SESSIONWHERE type<>’BACKGROUND’;

 

NVL(x1,x2)

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

 
如果x1为空返回x2,否则返回x1。
SELECT NVL(ename,’无姓名’)FROM EMP;
分组函数

 
AVG([{DISTINCT|ALL}]<n>) 求返回行的指定列的平均值 SELECTAVG(sal),AVG(ALL sal),AVG(DISTINCT sal)

FROM SCOTT.EMP;

 

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

FROM SCOTT.EMP

 

MAX([{DISTINCT|ALL}]<x>) 求返回行的指定列的最大值 SELECTMAX(sal),MAX(DISTINCT sal)FROM EMP;
MIN([{DISTINCT|ALL}]<x>) 求返回行的指定列的最小值 SELECTMIN(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、付费专栏及课程。

余额充值