在oracle的sql條件判斷中,多數情況下,因其靈活方便且可讀性強,會使用case when進行。但decode函式使用起來簡潔直觀,且可在同一行進行判斷,故在多數sql條件判斷中,我一直力求使用decode。本文基於專案實戰,簡單談談利用decode和sign代替case進行條件判斷。
先談談專案:比較產品的返修時間(repairtime)與保修截止時間(warrantytime),如返修時間在保修截止時間之前(或相同),即repairtime=< warrantytime,則該產品在保修期內(iswarranty),設欄位iswarranty值為y;返修時間在保修截止時間之後,即repairtime>warrantytime,則設為n。即達到以下效果圖:
以上需求涉及到sql中的條件判斷,若不使用case判斷,如何進行?答案如下:
select warrantytime,repairtime,對於以上sql,簡單補習一下decode和sign兩函式的用法,若讀者已經對decode和sign函式很熟悉,下文可忽略不看。decode(sign(to_date(warrantytime,'yyyy-mm-dd') - to_date(repairtime,'yyyy-mm-dd')),-1,'n','y') as iswar
from tproductinfo
函式語法:sign(n);函式說明:取數字n的符號,大於0返回1,小於0返回-1,等於0返回0;
函式示例:select sign(100),sign(-100),sign(0) from dual; 返回結果分別為: 1,-1,0
函式語法:decode(input_value,value,result[,value,result…][,default_result]);函式說明:input_value 試圖處理的數值;decode函式將該數值與一系列的序偶相比較,以決定最後的返回結果value是一組成序偶的數值;如果輸入數值與之匹配成功,則相應的結果將被返回;result 是一組成序偶的結果值;default_result 未能與任何一序偶匹配成功時,函式返回的預設值;
函式示例:對於本文實戰專案有 select decode(iswar,-1,'n','y') from dual;
好用的函式sign和decode
今天遇到了乙個問題,需要對比乙個欄位和5的大小,大於5的輸出0,小於五的輸出1。如果是用plsql程式設計的話可以用if else這種邏輯進行判斷,但是在sql裡可不能這麼寫,經過推薦,我組合使用了sign和decode,效果很好,小清新。如下 decode sign trunc col1 col2...
ORACLE的sign函式和DECODE函式
一.比較大小函式 sign 函式語法 sign n 函式說明 取數字n的符號,大於0返回1,小於0返回 1,等於0返回0 示例 1 select sign 100 sign 100 sign 0 from dual sign 100 sign 100 sign 0 1 1 0 2 a 10,b 20...
Oracle 中 sign和decode 函式用法
1 sign函式語法 sign n sign函式說明 取數字n的符號,大於0返回1,小於0返回 1,等於0返回0 n可以是表示式,n 200 例子 比較大小 a 10 b 50 sign a b 1 sign b a 1 sign a 10 02 decode的用法 含 釋 decode 條件,值1...