单行函数
|
分类
|
函数
|
功能
|
示例
|
字符函数
|
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
的中任何前导字符集。
|
SELECT LTRIM(‘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
舍入到小数点左边。
|
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;
|
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;
|
日期函数
(
日期可以进行算术运算
)
|
SYSDATE
|
返回相同日期
|
SELECT SYSDATE FROM 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-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()
|
求返回行的指定列的差异值
|
|