Oracle常用函数

一、数学函数

  ABS (x)  返回x的绝对值;
  BITAND(x,y)  返回对x,y进行位与( AND )操作的结果;
  CEIL(x)  返回大于或等于x的最小整数(注意负数);
  FLOOR(x)  返回小于或等于x的最大整数;
  EXP(x)  返回e的x次幂,其中e约为2.71828183;
  LN(x)  返回x的自然对数;
  LOG(x,y)  返回以x为底y的对数;
  POWER(x,y)  返回x的y次幂;
  SQRT(x)  返回x的平方根  ;
  MOD(x,y)  返回x除以y的余数;
  SIGN(x)  返回x的符号;
   ROUND(x[,y])    返回对x取整的结果。y为可选参数,说明对第几位小数处取整。没有指定y的时候 则对x的0位小数取整;如果是负数,则对x在小数点的左边的第|y|位取整。 此函数是四舍五入取整
  TRUNC(x[,y])    与ROUND类似,之不过是直接舍去尾数
 

二、聚合函数

  AVG(DISTINCT|ALL)  求平均值;

  MAX(DISTINCT|ALL)  求最大值;

  MIN(DISTINCT|ALL)  求最小值;

  STDDEV(distinct|all)  求标准差;

  VARIANCE(DISTINCT|ALL)  求协方差;  

  SUM(DISTINCT|ALL)  求和; 

  COUNT(DISTINCT|ALL)  求记录、数据个数;

  MEDIAN()  求中位数;

三、日期函数

  SYSDATE  用来得到系统的当前日期

  ADD_MONTHS  增加或减去月份

  LAST_DAY  返回日期的最后一天

  MONTHS_BETWEEN(date2,date1)  给出date2-date1的月份

  NEW_TIME(date,'this','that')  给出在this时区=other时区的日期和时间    

     简写                  时区                 

     AST OR ADT          大西洋标准时间         
     HST OR HDT          阿拉斯加—夏威夷时间
     BST OR BDT          英国夏令时
     MST OR MDT          美国山区时间
     CST OR CDT          美国中央时区
     NST                 新大陆标准时间
     EST OR EDT          美国东部时间
     PST OR PDT          太平洋标准时间
     GMT                 格伦威治标准时间
     YST OR YDT          Yukon标准时间

  NEXT_DAY   返回与制定日期在同一个星期或之后一个星期内的,你所要求的星期天数的确切日期。 

    星期日 = 1  星期一 = 2  星期二 = 3  星期三 = 4  星期四 = 5  星期五 = 6  星期六 = 7  

  CURRENT_DATE  当前会话时区中的当前日期 

  CURRENT_TIMESTAMP  以timestamp with time zone数据类型返回当前会话时区中的当前日期

  DBTIMEZONE()   返回时区

  SESSIONTIMEZONE  返回回话时区  其中DBTIMEZONE是数据库的,session是针对当前会话的,因为时区在会话级可以改变

  EXTRACT   找出日期或间隔值的字段值 

  LOCALTIMESTAMP   返回会话中的日期和时间 

  TRUNC(for dates)  TRUNC函数为指定元素而截去的日期值。

    其具体的语法格式如下:
      TRUNC(date[,fmt])
      其中:
      date 一个日期值
      fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
 
  SELECT TRUNC(SYSDATE,'YYYY') FROM DUAL; --返回当年第一天.
 
  SELECT TRUNC(SYSDATE,'MM') FROM DUAL; --返回当月第一天.
 
  SELECT TRUNC(SYSDATE,'D') FROM DUAL; --返回当前星期的第一天.
 
  SELECT TRUNC(SYSDATE,'DD') FROM DUAL;--返回当前年月日
 
  例:

  ----  上月最后一天
  SELECT TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), 'YYYY/MM/DD') FROM DUAL;

  ----: 上个月的今天
  SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') FROM DUAL;

  ---- 上个月第一天
  SELECT TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE)+1,-2),'YYYY-MM-DD') FirstDay FROM DUAL;

  ---  按照每周进行统计
  SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL;

  ---  按照每月进行统计
  SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL;

  ----  按照每季度进行统计
  SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL;

  ---  按照每年进行统计
  SELECT TO_CHAR(SYSDATE, 'YYYY') FROM DUAL;


  格式化日期函数:
    Q 季度,1~3月为第一季度 
    SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL;        -- 2表示第二季度

    MM 月份数 
    SELECT  TO_CHAR(SYSDATE, 'MM') FROM DUAL;      --04表示4月 

    RM 月份的罗马表示 
    SELECT TO_CHAR(SYSDATE, 'RM') FROM DUAL;       --IV表示4月 

    Month 用9个字符长度表示的月份名 
    SELECT TO_CHAR(SYSDATE, 'MONTH') FROM DUAL;    -- 4月 

    WW 当年第几周 
    SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL;       -- 24表示2002年6月13日为第24周 

    W 本月第几周 
    SELECT TO_CHAR(SYSDATE, 'W') FROM DUAL;        -- 2011年04月26日为第4周 

    DDD 当年第几天. 1月1日为001,2月1日为032 
    SELECT TO_CHAR(SYSDATE, 'DDD') FROM DUAL;

    DD 当月第几天 
    SELECT TO_CHAR(SYSDATE, 'DD') FROM DUAL;

    D 周内第几天 
    SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;

    DY 周内第几天缩写 
    SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL;

    HH或HH12 12进制小时数
    SELECT TO_CHAR(SYSDATE, 'HH') FROM DUAL;

    HH24 24小时制 
    SELECT TO_CHAR(SYSDATE, 'HH24') FROM DUAL;

    MI 分钟数(0~59) 
    SELECT TO_CHAR(SYSDATE, 'MI') FROM DUAL;
    提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。

    SS 秒数(0~59) 
    SELECT TO_CHAR(SYSDATE, 'SS') FROM DUAL;

四、字符函数

  ASCII(str)  返回字符串的ASCII值

  CHR(x)  返回整数所对应的ASCII字符

  CONCAT(A,B)  连接字符串A和字符串B

    如果要连接表里面的两个字段可以用||

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

  LENGTH  返回字符串的长度;

    返回表某条数据某个列实际长度,如果该表没有数据,返回0

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

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

  LTRIM(X,[TRIM_STRING])  删除X左边出现的字符串TRIM_STRING, 默认为空字符串

  RTRIM(X, [TRIM_STRING])  删除右边出现的字符串TRIM_STRING,默认为空字符串。

  SUBSTR(string,start,count)  取子字符串,从start开始,取count个

  INSTR(C1,C2,I,J)  在一个字符串中搜索指定的字符,返回发现指定的字符的位置;

    C1    被搜索的字符串
    C2    希望搜索的字符串
    I     搜索的开始位置,默认为1
    J     出现的位置,默认为1

  RPAD(str,X,str1)  在str的右边粘贴字符str1

    注意长度值X并不是粘贴字符的长度,而是整个字符串的长度,如果长度小于原始字符串取原始字符串前X位

  LPAD(str,X,str1)  在str的左边粘贴字符str1

    注意的问题同上

  REPLACE('string','s1','s2')  将string中的字符串s1替换为字符串s2

  SOUNDEX  返回一个与给定的字符串读音相同的字符串

  TRIM('s' from 'string')  裁剪字符,将s从string中裁剪出去

    LEADING   剪掉前面的字符
    TRAILING  剪掉后面的字符
    如果不指定,默认为空格符 

  NVL(X, VALUE)  如果X是空值,返回VALUE,否则返回X

  NVL2(X, VALUE1, VALUE2)  如果X是空值,返回VALUE1, 否则返回VALUE2

  NANVI(X, VALUE)  如果X不是数字,那么返回VALUE,否则返回X

五、转换函数

  TO_CHAR(DATE,'FORMAT')  把对应的数据转换为字符串类型

  TO_DATE(STRING,'FORMAT')  将字符串转化为ORACLE中的一个日期

  TO_NUMBER(str)  将给出的字符转换为数字

  RUNC(for number)  按照指定的精度截取一个数

  TRUNC(number[,decimals])  返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。

    number 待做截取处理的数值
    decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分

  CHARTOROWID  把包含外部格式的ROWID的CHAR或VARCHAR2数值转换为内部的二进制格式.参数string必须是包含外部格式的ROWID的18字符的字符串.

  ROWIDTOCHAR  将ROWID数据类型转换为字符类型,将ROWID类型的数值rowid转换为其外部的18字符的字符串表示。

  CONVERT(c,dset,sset)  将源字符串 sset从一个语言字符集转换到另一个目的dset字符集

  HEXTORAW(x)  将一个十六进制构成的字符串x转换raw

  RAWTOHEX  将RAW类数值rawvalue转换为一个相应的十六进制表示的字符串. rawvalue中的每个字节都被转换为一个双字节的字符串. RAWTOHEX和HEXTORAW是两个相反的函数.

  TO_MULTI_BYTE  将字符串中的单字节字符转化为多字节字符即将指定字符转换为全角并返回char类型字串 

   DUMP(s,fmt,start,length)  DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值

    fmt含4种格式:8||10||16||17,分别表示8进制,10进制,16进制和单字符,默认为10进制。start参数表示开始位置,length表示字串数长度。 

  EMPTY_BLOB(),EMPTY_CLOB()  这两个函数都是用来对大数据类型字段进行初始化操作的函数

六、控制流函数(常用在PL/SQL语句中)

  流程控制:

    IF (表达式) then  执行的语句   end if; (end if :结束IF)  判断满足一种情况的条件

    IF (表达式) then  执行的语句  else  执行的语句   end if;  判断满足两种情况的条件

    IF (表达式) then 执行的语句 elseif 执行的语句  elseif 执行的语句 ....   end if;   判断满足多种情况的 条件

    Case (表达式) when (条件表达式结果1 )then 执行语句1  when(条件表达式结果2) then 执行的语句 2 else 执行的语句 n end Caase; (end case 结束 Case)

    Case when (条件表达式1)  then 执行语句1  when (条件表达式2) then 执行语句2  else 执行语句n end case;

  循环控制:

    LOOP  语句段; exit [when/if 条件表达式]  end Loop;  至少执行一次  相当于 do{} while(条件表达式);当满足when/if条件时,使用exit退出,否则,end Loop;

    while  条件表达式 LOOP 执行语句 end  LOOP ;  只有条件表达式 为 true时候就会运行;

    for 循环变量 IN [reverse] 初始值表达式 ... 终值表达式 LOOP 执行语句  END LOOP

PS:因作者能力有限,如有误还请谅解;

猜你喜欢

转载自www.cnblogs.com/WHL5/p/8970748.html