Oracle Common Functions


Dual表为虚拟表,当想取一个常量时,就要借助dual表。例如:
Select 1 from dual;
select sysdate from  dual;--取系统当前时间


select last_day(sysdate) from dual;--获取指定日期月份的最后一天


select add_months(sysdate,3) from dual;--日期加上3个月


select nvl(null,'111'),nvl('11','222') from dual;--第一项为空,则返回第二项,否则返回第一项


select decode('11','22','bb','33','cc','dd') from dual;---第一项为‘22’ 则返回‘bb’,为‘33’返回‘cc' 找不到匹配项则返回最后一项’dd'


select sign(2),sign(0),sign(-2) from dual;--取数字的符号,正为1,0为0,负为-1,decode可以和sign结合使用,例如decode(sign(n-100),-1,‘小于’100,1,‘大于100’,‘等于100’)


select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--把日期转化为指定格式的字符串


select upper('aaaaAAA') from dual;--把字符串全转成大写字母


select lower('aaaaAAA') from dual;--把字符串全转成小写字母


select initcap('hello girl!') from dual;--首字母大写(每段字符串)


select ascii('z') from dual;--取键值对用的ascii码


select chr('1') from dual ;--取ascii码对应的键值


select to_char(sysdate+(rownum-1)/(60*60*24),' hh24:mi:ss'),rownum  from dual connect by rownum<(60*60*24);--取一天的每一秒钟,同理可以取每个小时和分钟


select to_date('2011-05-04','yyyy-mm-dd'),to_number('12334') from dual;--转为日期和数字格式


select CONNECT_BY_ROOT id ,connect_by_isleaf, t.*
  from table t
  start with t.dep_code =rootid
connect by  nocycle prior t.id = t.pid;--树查询 由父查所有子孙节点  connect_by_isleaf 可以直接取到是否也子节点属性,CONNECT_BY_ROOT+节点id可以取到节点不是根节点的祖先id


select user from dual;--取当前登录用户


select vsize('xx') from dual;--取当前字符长度


select trunc(45.12),trunc(45.12,1),trunc(45.12,-1) from dual;--取当前数字的小数位数,默认缺省值为0


select substr('abcdefg',3,4) from dual;--取字符串从指定位置开始长度的子串


select instr('abcdefg','ef') from dual;--返回查找子串在字符串的位置


select ltrim('   abc   '),rtrim('   abc   '),trim('   abc   ') from dual;--分别去掉字符串左边,右边和全部的空格


select s.id,lag(s.id,2) over(order by s.id),lead(s.id,2) over(order by s.name) from table s;--取该列相对前/后N行的值


select replace('abc','b','xy'),translate('abc','b','xy') from dual;--替换字符,结果分别为'axyc'和’axc'


select sum(r.id) from table r group by r.work_name having sum(r.id)<1000;--group by 必须和sum、count、max等函数一起用,否则会报错,having字句相当于goup by的where条件


select sum(r.id) over (order by r.id)  from table  r;--按id排序后逐项求和,例如;id排序为1、2、5,结果就为1、3、8


select sum(r.id) over (partition by r.work_name order by r.id)  from table  r;--按work_name分组后,在各个组内逐项求和


select ceil(9.326),floor(9.326) from dual;--向上/下取整


select sqrt(3),power(3,4) from dual;--取3的平方跟,取3的4次方


select  round(9.326,-2) from dual;--取固定位数小数,四舍五入,第二项可以为负的,例如为-1时结果为10,-2时为0


select mod(13,3) from dual;--取余数


select abs(-1233) from dual;--返回对象的绝对值


select max(r.id),min(r.id),avg(r.id),count(*),sum(r.id) from table  r group by r.work_name;--6个分组函数,和group by搭配,分别是每组最大值、最小值、平均值、对象总数、对象值总和


select  Stddev(r.id) from table  r group by r.work_name;--返回每组的标准偏差值


 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325712127&siteId=291194637