共计 5140 个字符,预计需要花费 13 分钟才能阅读完成。
Oracle 数据库内置系统函数主要分为以下类别:数学函数、字符串函数、日期函数、转换函数、聚集函数、分析 / 聚合函数
一、数学函数 ———— 返回数字
abs(n):返回数字 n 的绝对值
ceil(n):返回 >= 数字 n 的最小整数
floor(n):返回 <= 数字 n 的最大整数
round(n,[m]):做四舍五入运算, 如果 m 缺省则四舍五入到整数位
m<0, 四舍五入到小数点的前 m 位,m>0 四舍五入到小数点的后 m 位
trunc(n,[m]):截取数字, 如果 m 缺省则将小数位截去
m<0, 截取到小数点的前 m 位,m>0 截取到小数点的后 m 位
运算结果:
1 ABS(-2.3) CEIL(-2.6) CEIL(2.6) FLOOR(-2.6) FLOOR(2.6) ROUND(-666.588) ROUND(-666.588,2) ROUND(-666.588,-2) TRUNC(-666.588) TRUNC(-666.588,2) TRUNC(-666.588,-2)
2 ---------- ---------- ---------- ----------- ---------- --------------- ----------------- ------------------ --------------- ----------------- ------------------
3 2.3 -2 3 -3 2 -667 -666.59 -700 -666 -666.58 -600
sqrt(n):返回数字 n(n 必须大于 0)的平方根
power(n,m):返回数字 n 的 m 次幂,底数 n 和指数 m 都可以是任意数字, 但是如果底数 n 为负数则指数 m 必须为正数
exp(n):返回 e(2.71828183….) 的 n 次幂
ln(n):返回数字 n(n 必须大于 0) 的自然对数
log(n,m):返回底数为 n(除 0 及 1 的正整数) 的真数为 m(任何正整数)对数
mod(n,m):返回数字 n / m 的余数, 如果数字 m = 0 则返回 n
1 --demo:sqrt(),power(),exp(),ln(),log(),mod()
2 SELECT sqrt(4),power(2,3),exp(1),ln(10),log(2,8),mod(5,2)
3 FROM dual
运算结果:
1 SQRT(4) POWER(2,3) EXP(1) LN(10) LOG(2,8) MOD(5,2)
2 ---------- ---------- ---------- ---------- ---------- ----------
3 2 8 2.71828182 2.30258509 3 1
cos(n):返回数字 n(弧度单位表示的角度值)的余弦值
cosh(n):返回数字 n 的双曲余弦值
acos(n):返回数字 n 的反余弦值,求的结果单位为弧度,n 的范围为 -1 < n < 1
sin(n):返回数字 n(弧度单位表示的角度值) 的正弦值
sinh(n,m):返回数字 n 的双曲正弦值
asin(n,m):返回数字 n 的反正弦值,求的结果单位为弧度,n 的范围为 -1 < n < 1
tan(n):返回数字 n(弧度表示的角度值) 的正切值
tanh(n):返回数字 n 的双曲正切值
atan(n):返回数字 n 的反正切值,求的结果单位为弧度,n 的范围任意数值
atan(n,m):返回数字 n / m 的反正切值,求的结果单位为弧度,你可以为任意数值,m 不可为 0
1 --demo:cos(),cosh(),acos(),sin(),sinh(),asin(),tan(),tanh(),atan(),atan()
2 SELECT cos(0.5),cosh(2),acos(1),
3 sin(0.5),sinh(2),asin(0),
4 tan(0.5),tanh(2),atan(8),atan(16/2)
5 FROM dual
运算结果:
1 COS(0.5) COSH(2) ACOS(1) SIN(0.5) SINH(2) ASIN(0) TAN(0.5) TANH(2) ATAN(8) ATAN(16/2)
2 ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
3 0.87758256 3.76219569 0 0.47942553 3.62686040 0 0.54630248 0.96402758 1.44644133 1.44644133
二、字符串函数 ———— 返回字符值
ascii(n):返回字符 c 的 ascii 值
chr(n):将 ascii 值转换为对应的字符
initcap(s):将字符串 s 所有的单词(单词是用. 空格或给字母数字字符由空格, 控制字符, 标点符号进行分隔) 的首字母大写, 其余小写
lower(s):将字符串 s 中所有的字符转换为小写
upper(s):将字符串 s 中所有的字符转换为大写
concat(s1,s2):将字符串 s2 连接在 s1 后面,等同于操作符 ||
length(s):将返回字串 s 的长度,返回的长度包括其中的所有空格(尾部空格也算);如果 s 为 null,则返回 null
1 --ascii(),chr(),concat(),initcap(), lower(),upper(), length(),
2 SELECT ascii('A'),chr(65),concat('Hello','World'),
3 initcap('hello woRld'),
4 lower('HeLLo woRld'),upper('HeLLo woRld'),
5 length('HeLLo woRld'),length('天下英雄出我辈')
6 FROM dual
运算结果:
1 ASCII('A') CHR(65) CONCAT('HELLO','WORLD') INITCAP('HELLOWORLD') LOWER('HELLOWORLD') UPPER('HELLOWORLD') LENGTH('HELLOWORLD')
2 ---------- ------- ----------------------- --------------------- ------------------- ------------------- --------------------
3 65 A HelloWorld Hello World hello world HELLO WORLD 11
lpad(s1,n,s2):在字串 s1 的左端填充字串 s2,直至填充后的 s1 的总长度为 n
如果不指定 s2 则默认为空格
如果 s1 的长度 >n,则直接返回 s1 左端的 n 个字符
rpad(s1,n,s2):在字串 s1 的右端填充字串 s2,直至填充后的 s1 的总长度为 n
如果不指定 s2 则默认为空格
如果 s1 的长度 >n,则直接返回 s1 左端的 n 个字符
1 --demo:lpad、rpad
2 SELECT lpad('a',10,'8'),lpad('SnnnnnnnnR',6,'8'),
3 rpad('a',10,'8'),rpad('SnnnnnnnnR',6,'8')
4 FROM dual
运算结果:
1 LPAD('A',10,'8') LPAD('SNNNNNNNNR',6,'8') RPAD('A',10,'8') RPAD('SNNNNNNNNR',6,'8')
2 ---------------- ------------------------ ---------------- ------------------------
3 888888888a Snnnnn a888888888 Snnnnn
instr(s1,s2,n,m):取得子串 s2 在字串 s1 中的位置
n 表示在 s1 中开始搜索的位置,m 表示字串 s2 出现的次数
如果 n 为负数,则表示从尾部开始搜索,n 与 m 默认为 1
substr(s1,m,n):取得字串 s1 从 m 开始,长度为 n 的子串,m>0 表示从头开始搜索,m<0 表示从尾开始
1 -- instr(), substr()
2 SELECT instr('888arrayarray','array',1,1) ,instr('888arrayarray','array',1,2),
3 instr('888arrayarray','array',-1,1),instr('888arrayarray','array',-1,2),
4 substr('纵横天下',1,2),substr('array',-4,3)
5 FROM dual
运算结果:
INSTR('888ARRAYARRAY','ARRAY', INSTR('888ARRAYARRAY','ARRAY', INSTR('888ARRAYARRAY','ARRAY', INSTR('888ARRAYARRAY','ARRAY',
------------------------------ ------------------------------ ------------------------------ ------------------------------
4 9 9 4
ltrim(s1,str):从左端开始逐一取得字串 s1 左端包含的 str 中的任何字符
当遇到不是 str 中的字符是,则结束并返回剩余结果
rtrim(s1,str):从右端开始逐一取得字串 s1 右端包含的 str 中的任何字符
当遇到不是 str 中的字符是,则结束并返回剩余结果
trim(c FROM str):从字串 str 的头部、尾部、或两端截去字符 c(c 只能够是一个字符)
当遇到不是 str 中的字符是,则结束并返回剩余结果
1 SELECT ltrim('terry','t'),ltrim('terry','ter'),ltrim('terry','e'),
2 rtrim('terry','y'),rtrim('terry','ry'),rtrim('terry','yre'),
3 trim('e' from 'terry'),trim('t' from 'terry'),trim('y' from 'terryy')
4 FROM dual
运行结果:
1 LTRIM('TERRY','T') LTRIM('TERRY','TER') LTRIM('TERRY','E') RTRIM('TERRY','Y') RTRIM('TERRY','RY') RTRIM('TERRY','YRE') TRIM('E'FROM'TERRY') TRIM('T'FROM'TERRY') TRIM('Y'FROM'TERRYY')
2 ------------------ -------------------- ------------------ ------------------ ------------------- -------------------- -------------------- -------------------- ---------------------
3 erry y terry terr te t terry erry terr
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147403.htm