Oracle 常用内置系统函数总结

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 --Demo:abs()、ceil()、floor()、trunc() 
2 SELECT abs(-2.3), 
3        ceil(-2.6),ceil(2.6), 
4        floor(-2.6),floor(2.6), 
5        round(-666.588),round(-666.588,2),round(-666.588,-2), 
6        trunc(-666.588),trunc(-666.588,2),trunc(-666.588,-2
7    FROM dual;

运算结果

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

运行结果:

相关推荐