Oracle中的常用函数

1.ASCII

返回与指定的字符对应的十进制数;

  SQL> SELECT ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ')    space FROM dual;
                    A         A      ZERO     SPACE
                    --------- --------- --------- ---------
                   65        97        48        32

2.CHR

给出整数,返回对应的字符;

  SQL> SELECT chr(54740) zhao,chr(65) chr65 FROM dual;
            ZH C
            -- -
            赵 A

3.CONCAT

连接两个字符串;

SQL> SELECT concat('010-','88888888')||'转110'  电话 FROM dual;
             电话
            ----------------
            010-88888888转110

4.INITCAP

返回字符串并将字符串的第一个字母变为大写;

SQL> SELECT initcap('smith') upp FROM dual;
            UPP
            -----
            Smith

5.INSTR(C1,C2,I,J)

在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J (第N次)出现的位置,默认为1

 SQL> SELECT instr('oracle traning','ra',1,2) instring FROM dual;
             INSTRING
            --------------
                    9

6.LENGTH *

返回字符串的长度

SQL> SELECT      name,length(name)  FROM dual;
        Name       length(name)
      ---------     -------------------
       zhangsan        8

7.LOWER

返回字符串,并将所有的字符小写

  SQL> SELECT lower('AaBbCcDd')AaBbCcDd FROM dual;
            AABBCCDD
          -----------------
            aabbccdd

8.UPPER

返回字符串,并将所有的字符大写

  SQL> SELECT upper('AaBbCcDd') upper FROM dual;
              UPPER
            --------------
            AABBCCDD

9.RPAD和LPAD

RPAD 在列的右边粘贴字符
LPAD 在列的左边粘贴字符

SQL> SELECT lpad(rpad('gao',10,'*'),17,'*') FROM dual;
            LPAD(RPAD('GAO',1
          ----------------------------
            *******gao*******

不够字符则用*来填满

10.LTRIM和RTRIM *

LTRIM  删除左边出现的字符串
RTRIM  删除右边出现的字符串
    SQL> SELECT ltrim(rtrim('   gao qian jing   ',' '),' ') FROM dual;

            LTRIM(RTRIM('
          ----------------------
            gao qian jing

11.SUBSTR(string,start,count) *

取子字符串,从start开始,取count个
    SQL> SELECT substr('13088888888',3,8)  FROM  dual;
            SUBSTR('
           ---------------
            08888888

12.REPLACE('string','s1','s2')

string 希望被替换的字符或变量
s1 被替换的字符串
s2 要替换的字符串

   SQL> SELECT replace('he love you','he','i') FROM dual;
            REPLACE('H
          -----------------
             i love you            

13. TRIM('s' FROM 'string')

   LEADING   剪掉前面的字符
   TRAILING  剪掉后面的字符
     SQL> select trim('a' FROM 'a b 123') FROM dual;
TRIM('
------
 b 123

14. ABS

 返回指定值的绝对值
    SQL> SELECT abs(100),abs(-100) FROM dual;                

15. CEIL *

  返回大于或等于给出数字的最小整数
       SQL> SELECT ceil(3.1415927) FROM dual;
            CEIL(3.1415927)
            -------------------
                          4

16. FLOOR *

  对给定的数字取整数
      SQL> SELECT floor(2345.67) FROM dual;
              FLOOR(2345.67)
            ----------------------
                      2345

17. MOD(n1,n2) *

返回一个n1除以n2的余数

  SQL> SELECT mod(10,3),mod(3,3),mod(2,3) FROM dual;
            MOD(10,3)  MOD(3,3)   MOD(2,3)
            ------------   -----------   ---------
                    1         0         2

18. ROUND *

按照指定的精度进行舍入
  SQL>SELECT round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) FROM
            dual;
       ROUND(55.5)  ROUND(-55.4)   TRUNC(55.5)     TRUNC(-55.5)
       -------------    ----------------     ---------------    -----------------
               56          -55              55                  -55

19.SIGN *

取数字n的符号,大于0返回1,小于0返回-1,等于0返回0
    SQL> SELECT sign(123),sign(-100),sign(0) FROM dual;

            SIGN(123)  SIGN(-100)   SIGN(0)
            -----------    ----------    ---------
                    1         -1         0          

20.TRUNC *

按照指定的精度截取一个数

  SQL> SELECT trunc(124.1666,-2) trunc1,trunc(124.16666,2) FROM dual;
               TRUNC1     TRUNC(124.16666,2)
                ---------   --------------------------
                  100             124.16

21.ADD_MONTHS *

增加或减去月份
SQL> SELECT 
         to_char(add_months(to_date('200712','yyyymm'),2),'yyyymm') FROM  dual; 
            TO_CHA
            ----------
            200802
 SQL> SELECT 
            to_char(add_months(to_date('200712','yyyymm'),-2),'yyyymm') FROM   dual;
            TO_CHA
            ----------
            200710

22. LAST_DAY

   返回日期的最后一天
  SQL> SELECT last_day(to_date('2007-05-12','yyyy-mm-dd')) FROM dual;
LAST_DAY(T
----------
31-5月 -07  
  SQL> SELECT last_day(sysdate) FROM dual;
             LAST_DAY(S
----------
31-8月 -07

23.NEXT_DAY(date,'day')

给出日期date和星期x之后计算下一个星期的日期

 SQL> SELECT next_day('08-8月-2007','星期五') next_day FROM dual;


NEXT_DAY
----------
10-8月 -07             

24.SYSDATE **

 用来得到系统的当前日期
     SQL> SELECT to_char(sysdate,'dd-mm-yyyy day') FROM dual;
TO_CHAR(SYSDATE,'
-----------------------
08-08-2007 星期三

25. TO_CHAR(date,'format') **

      SQL> SELECT to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') FROM dual;
            TO_CHAR(SYSDATE,'YY
            --------------------------
            2004/05/09 21:14:41

26. TO_DATE(string,'format') **

   将字符串转化为ORACLE中的一个日期

27. TO_NUMBER *

   将给出的字符转换为数字
       SQL> SELECT to_number('1999') year FROM dual;
                 YEAR
            ----------------
                 1999

28. GREATEST *

   返回一组表达式中的最大值,即比较字符的编码大小.
       SQL> SELECT greatest('AA','AB','AC') FROM dual;

            GR
            ----
            AC
       SQL> SELECT greatest('啊','安','天') FROM dual;
             GR
            ----
             天

29. LEAST *

   返回一组表达式中的最小值 
      SQL> SELECT least('啊','安','天') FROM dual;
            LE
          ------
            啊

30.UID

 返回标识当前用户的唯一整数
      SQL> show user
      SQL> SELECT username,user_id FROM dba_users where user_id=uid;
            USERNAME                         USER_ID
            ------------------------------         ---------
            SCOTT                                   25

31.USER

  返回当前用户的名字
      SQL> SELECT user FROM  dual;
             USER
           -----------
             SCOTT

32.AVG(DISTINCT|ALL) *

   all表示对所有的值求平均值,distinct只对不同的值求平均值
       SQL> SELECT avg(distinct sal) FROM person;
            AVG(DISTINCTSAL)
            -----------------------
                     3333.33
       SQL> SELECT avg(all sal) FROM gao.table3;
             AVG(ALLSAL)
            ------------------
                2592.59

33.MAX(DISTINCT|ALL) *

 求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次
      SQL> SELECT max(distinct sal) FROM scott.emp;

            MAX(DISTINCTSAL)
            --------------------
                        5000

34.MIN(DISTINCT|ALL) *

  求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次
     SQL> SELECT min(all sal) FROM person;
            MIN(ALLSAL)
            ----------------
                1111.11

35.GROUP BY *

 主要用来对一组数进行统计
    SQL> SELECT deptno,count(*),sum(sal) FROM scott.emp group by deptno;
               DEPTNO  COUNT(*)  SUM(SAL)
            --------- --------- ---------
                   10         3      8750
                   20         5     10875
                   30         6      9400

36.HAVING *

   对分组统计再加限制条件
     SQL> SELECT deptno,count(*),sum(sal) FROM scott.emp group by deptno 
            having count(*)>=5;
               DEPTNO  COUNT(*)  SUM(SAL)
            ---------     ---------    ---------
                   20         5     10875
                   30         6      9400
     SQL> SELECT deptno,count(*),sum(sal) FROM scott.emp having 
            count(*)>=5 group by deptno ;

               DEPTNO  COUNT(*)  SUM(SAL)
               ---------   ---------   ---------
                   20         5     10875
                   30         6      9400

37. ORDER BY *

用于对查询到的结果进行排序输出

   SQL> SELECT deptno,ename,sal FROM scott.emp order by deptno,sal desc;

38. Extract(date FROM datetime)

从日期时间中取得特定数据(例如取出月、年等)
    SELECT extract(YEAR FROM sysdate)   FROM dual
SELECT extract(MONTH FROM sysdate) FROM dual
    SELECT extract(DAY FROM sysdate)    FROM dual
    SELECT extract(HOUR FROM localtimestamp) FROM dual

39. DECODE(expr,search1,result1[,search2,result2][,default])

  SQL>SELECT deptno,DECODE(deptno,'10','ABC','20','DEF','30','AAA',’NO’)  
FROM dept;
    DEPTNO   DEC
----------  -------
        10     ABC
        20     DEF
        23
        24
        25
        30     AAA

40. NULLIF(expr1,expr2)

   如果expr1和expr2的值相等,则返回NULL,否则返回expr1

41. NVL(expr1,expr2)

如果expr1是null,则返回expr2; 如果expr1不为null,则返回expr1

42. NVL2(expr1,expr2,expr3)

    如果expr1不是null,则返回expr2;如果expr1是null,则返回expr3;参数expr1可以是任意数据类型,而expr2和expr3可以是除Long之外的任何数据类型

43.Translate(x,from_string,to_string)

        SELECT translate('a1b0c2d3','3210','pqxy') from dual;

从'a1b0c2d3'中找在‘3210’中出现过的字符,找到后用‘pqxy’相应位置的字符替换

TRANSLAT
--------
axbycqdp

实际使用中最好使第二个参数 和 第三个参数的位数一样

1 用 x 代替
0 用 y 代替
2用 q 代替
3 用 p 代替

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容