1.Decode函數
直接介紹如何用.
SELECT id,name
DECODE(flag,'1','True','0','false',NULL,'None','Invalid')
欄位 | 判斷欄位值,顯示具體含義 | 預設值
FROM UserInfo;
decode(m.totalcount,null,0,m.totalcount)
在進行報表統計的時候,有的欄位無記錄,這時候需要把統計置為0,如果有記錄返回本身值.
2.Case語句用法.
select rownum as rn ,TERMINATEID,CMPTSCODE ,ERRLEVEL, ERRCODE ,ERRSTATE,
(CASE T.ERRSTATE WHEN '0' THEN '未發生故障' WHEN '1' THEN '有故障未申報' WHEN '2' THEN '有故障已申報' WHEN '3' THEN '已處理' END)
ERRSTATENAME,ERRTIME ,REMARK from WX_CMPTSSTATE T
和Decode用法差不多,但是這個比較和IF-ELSE接近,符合大家的習慣寫法.
3.樹查詢
--查詢位置 011 以下的所有孩子
select * from ( select wk_pst.*,level from wk_pst
connect by prior pos_code =prt_pos_code
start with pos_code='011'
) a
where a.pos_code<>'011'
--偽列Level的應用
select * from ( select wk_pst.*,level as ll from wk_pst
connect by prior pos_code =prt_pos_code
start with pos_code='011'
) a
where a.pos_code<>'011' and a.ll =3 --倒著查,注意遞迴條件的寫法,僅僅置換了一下而已,注意偽列的變化
select wk_pst.*,level as ll from wk_pst
connect by prior prt_pos_code=pos_code
start with pos_code='111'
order by pos_code
4 SQL中的CONVERT Oracle中的to_Char和cast
SQL中的用法:
SELECT CONVERT(varchar(30),getdate(),101) now
Oracle:
SELECT to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss')
SELECT Cast(欄位 as 類型)