1.NVL
NVL (E1, E2) 的功能为:如果E1为NULL,则函数返回E2,否则返回E1本身。
但此函数有一定局限,所以就有了NVL2函数。
拓展:NVL2函数 : Oracle / PLSQL中的一个函数,
Oracle在NVL函数的功能上扩展,提供了NVL2函数。
NVL2 (E1, E2, E3) 的功能为:如果E1为NULL,则函数返回E3,若E1不为null,则返回E2。
此NVL的作用与SQLserver 中的 ISNULL( string1, replace_with) 一样。
注意:
string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数。
例:nvl(yanlei777,0) > 0
NVL(yanlei777, 0) 的意思是 如果 yanlei777 是NULL, 则取 0值
2.DECODE(value, if1, then1, if2,then2, if3,then3, . . . else ),V
alue 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。
当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;
如果value等于if2,Decode函数结果是then2;等等。
事实上,可以给出多个if/then 配对。
如果value结果不等于给出的任何配对时,Decode 结果就返回else 。
需要注意的是,这里的if、then及else 都可以是函数或计算表达式。
3.case when语句类似于C#语法中的if else语法,
比如:select case when id > 0 then 1 else 0 end as flag from table1,
这句sql就表示 筛选所有table1中的记录,当id大于0时,
新的flag列就为1,否则,flag列为0
round( case when ttl = 0 then 0 when round(ttls/8,0) = 0 then 0 else ttl/round(ttls/8,0) end,2) as wos
4.START WITH CONNECT BY PRIOR子句实现递归查询
START WITH t.PARENT_ID = '0' CONNECT BY PRIOR t.ID = t.PARENT_ID
select num1,num2,level
from carol_tmp
start with num2=1008
connect by num2 = prior num1 order by level desc;
prior放的左右位置决定了检索是自底向上还是自顶向下.很明显以上的sql选择了自底向上,所以最终得到了根节点。