zoukankan      html  css  js  c++  java
  • Oracle常用函数和注意事项

    1.decode函数码值转换

    • decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
      decode上else其他条件必须加上
    • sign(value)结合decode方法
      sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1
    • case when
      oracle支持case when语句,相等的判断使用decode,涉及到不等使用casewhen语句

    2.左右连接

    • 左外连接
      select * from t_A a left join t_B b on a.id = b.id;
      select * from t_A a left outer join t_B b on a.id = b.id;
      Select * from t_A a,t_B b where a.id=b.id(+);
    • 右外连接
      select * from t_A a right join t_B b on a.id = b.id;
      select * from t_A a right outer join t_B b on a.id = b.id;
      select * from t_A a,t_B b where a.id(+)=b.id;
    • 全连接
      select * from t_A a full join t_B b on a.id = b.id;
      select * from t_A a full outer join t_B b on a.id = b.id;
    • 内连接
      select * from t_A a,t_B b where a.id = b.id;
      select * from t_A a join t_B b on a.id = b.id;

    3.时间日期

    • 时间转字符串
    TO_NUMBER(TO_CHAR(AC01.Aac006,'yyyy'))>=1992
    
    • 字符串转时间
    select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss')
    

    to_date("要转换的字符串","转换的格式")

    • ADD_MONTHS(date,count)
      在指定日期上增加count个月,可为负数
    • LASE_DAY(date)
      返回所在月的最后一天
    • MONTHS_BETWEEN(date1,date2)
      返回date1和date2间隔多少个月
    • NEXT_DAY(date,'day')
      返回指定日期后的第一个星期几的日期,如NEXT_DAY(DATE,'星期一')
    • SYSDATE
      获取系统当前的日期值
    • CURRENT_TIMESTAMP
      获取当前的时间和日期值
    • ROUND(date,'day')
      对日期进行四舍五入,如ROUND(DATE,'MM'),按月四舍五入
      注意DAY是周,DD是按当前天四舍五入
    • TRUNC(date,'day')
      对日期进行截取

    4.nvl和nvl2

    • NVL2(expr1,expr2,expr3)
      功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。
    • NVL( string1, replace_with)
      功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
    • NULLIF(A,B)
      如果A和B相等则返回null,否则返回A
    • COALESCE(A,B,C,...)
      返回第一个不为空的字符

    5.字符串

    • 字符串连接采用'||'连接,支持Concat语句,Oracle的CONCAT()函数只支持两个参数,可以使用多个CONCAT()函数嵌套使用
    SELECT '工号为'||FNumber||'的员工姓名为'||FName FROM T_Employee 
    WHERE FName IS NOT NULL 
    
    • substr函数格式 (俗称:字符截取函数)
      格式1:substr(string string, int a, int b);
      格式2:substr(string string, int a) ;
    • instr(string,subString,position,ocurrence)查找字符串位置
      解释:
      string:源字符串
      subString:要查找的子字符串
      position:查找的开始位置
      ocurrence:源字符串中第几次出现的子字符串
    • replace(strSource, str1, str2) 将strSource中的str1替换成str2
      解析:strSource:源字符串
         str1: 要替换的字符串
        str2: 替换后的字符串
    • chr(integer)
      描述给定整数所对应的ASCII字符
    • concat(string1,string2)
      连接字符串string1和string2
    • initcap(string)
      将字符串string的第一个字母变为大写其余不变
    • lower(string)
      将字符串string的全部字母变为小写
    • upper(string)
      将字符串string的全部字母变为大写
    • lpad(string,count,char)
      让指定的字符char在字符串的左边填充
      -rpad(string,count,char)
      让指定的字符在字符串string的右边填充
      -ltrim(string,char)
      去掉字符串string左边char指定的字符
      -rtrim(string,char)
      去掉字符串string右边插入指定的字符
      -replace(string,char,cahr)
      替换字符串
      -substr(string,start,length)
      获取子串,start为0和1都表示第一位
      -length(string)
      获取字符串的长度

    6.类型转换

    oracle,字符串,数字,日期时间之间的转换使用to_char,to_date和to_number实现,具体使用如下

    • 日期转字符串
      TO_CHAR(DATE,FORMAT)
      TO_CHAR(DATE,'yyyy-mm-dd')
    • 字符串转日期
      TO_DATE(STRING,FORMAT)
      TO_DATE('2020-5-25','yyyy-mm-dd')需保证前后格式一致
      HH24代表24小时制,HH代表12小时制
    • 数字转字符串
      TO_CHAR(NUMBER,FORMAT)
      TO_CHAR(20000,'$9999')
    • 字符串转数字
      TO_NUMBER(string,format)
      TO_NUMBER('234234','999999')
      需保证前后格式一致,否则报错
    • 注意
      9代表一个数字,0表示强制显示为0,$表示货币符号,L本地货币符号,.小数点,,千分位
    日期->>字符串: TO_CHAR
    字符串->>日期: TO_DATE
    数字 ->> 字符串:TO_CHAR
    字符串 ->> 数字:TO_NUMBER
    
    graph LR
    日期--TO_CHAR -->字符串
    字符串--TO_DATE -->日期 
    数字--TO_CHAR -->字符串
    字符串--TO_NUMBER -->数字 
    

    7.数字函数

    oracle支持mod,power,ceil,floor对数字进行处理,与mysql中一致

    • TRUNC(NUMBER,PRESSION)
      对number进行截取,保留pression小数,
      trunc还可常用来进行时间处理
    • ROUND(NUMBER,PRESSION)
      保留小数,对数进行四舍五入

    8.分页

    Oracle 分页使用rownum实现

    SELECT *
    FROM (
          SELECT tt.*, ROWNUM AS rowno
          FROM(
               SELECT AAC001,CAC001,AAB001	
               FROM Ac60
               ORDER BY Ac60.CAE262 DESC
          ) tt
           WHERE ROWNUM <= 150
    ) 
    table_alias
    WHERE table_alias.rowno > 99
    

    rownum是查询后oracle给予的编号从1开始,给order by分页,要进行order by在通过子查询给予rownum,rownum关键字不能使用> >=只能使用< <=要使用同样通过子查询封装在外层通过别名实现

    9.关于null

    • =null和<>null和!=null恒不成立
    • in和any子查询中存在nul,没有影响
      not inin和all查询不出数据
  • 相关阅读:
    坐看夕阳
    张学孟 (帮别人名字作诗)
    光棍节有感
    我懂
    陶婷(帮别人名字作诗)
    你的爱是不是在等着我
    OpenCV数据读写操作
    数字图像处理中的形态学
    C++/C学习笔记(一)
    利用opencv绘制 灰度直方图 RGB直方图 HSV直方图 直方图均衡化
  • 原文地址:https://www.cnblogs.com/cxyc/p/13614811.html
Copyright © 2011-2022 走看看