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;--返回每组的标准偏差值