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查询不出数据
原文地址:https://www.cnblogs.com/cxyc/p/13614811.html