oracle 通過 nvl( )函式sql 查詢時為 空值 賦預設值
oracle 函式介紹之nvl
函式宣告:nvl(col,val)
說明:當col為空時取val作為返回值,當col不為空時取col值。
用處:最主要的是格式化資料,比如計算金額時,不想出現空資料,可以使用nvl(jine,0)來得到0。由於null+(或-,*,/)數字等於null,所以在表示式中對可能為空的值要使用nvl由於null!=null,有時對可能為空的列進行條件查詢時,可能出現結果集丟失資料問題,加上nvl就不會了。
經典用法:
通過查詢獲得某個欄位的合計值,如果這個值為null將給出乙個預設的預設值
例如:select nvl(sum(t.欄位),1) from table t
就表示如果sum(t.欄位) = null 就返回 1
另乙個有關的有用方法
declare i integer
select nvl(sum(t.欄位),1) into i from table t 這樣就可以把獲得的合計值儲存到變數i中,如果查詢的值為null就把它的值設定為預設的1
orcale中:
select nvl(rulescore,0) from zwjc_graderule where rulecode='fwtd'; 如果記錄中不存在rulecode ='fwtd'的資料.則查不出資料.
select nvl(rulescore,0) into rule_score from zwjc_graderule where rulecode='fwtd';會報查不到資料的錯
select nvl(sum(rulescore),0) from zwjc_graderule where rulecode='fwtd'; 如果記錄中不存在rulecode ='fwtd'的資料.還是可以得到一行列名為nvl(rulescore,0),值為0的資料.
select nvl(sum(rulescore),0) into rule_score from zwjc_graderule where rulecode='fwtd'; 不會報錯
oracle 函式介紹之nvl2
oracle在nvl函式的功能上擴充套件,提供了nvl2函式。
nvl2(e1, e2, e3)的功能為:如果e1為null,則函式返回e3,否則返回e2。e2和e3型別不同的話,e3會轉換為e2的型別。
限制: 1) e1可以是任意型別,e2, e3不能是long型別。
2) 如果 e2是字元型別,那麼e3轉為字元型再比較(null除外)。
3) 如果 e2是數值型別,那麼e3也轉為對應的數值型別。
4) 各個引數都不能是邏輯表示式.
oracle 函式介紹之nullif
格式: nullif(expr1,expr2) 等價於 "case when expr1 = expr 2 then null else expr1 end",相等返回null,不等返回expr1.
限制: expr1不能是識別符號null,錄入nullif(null,expr2)那麼會提示錯誤。
expr1,expr2 都必須是乙個變數或者是乙個常量表示式,不能是邏輯表示式。
oracle 函式介紹之lnnvl(a)
a是乙個表示式
lnnvl只能用於where子句中;表示式的操作符號不能包含 and, or, between。
如果a的結果是false或者是unknown,那麼lnnvl返回true;如果a的結果是true,返回false.
"如果a的結果是false或者是unknown,那麼lnnvl返回true",這個很重要,因為乙個空值或者unknown的值和另外乙個常量或者有值的變數比較的時候,返回的總是unknown,所以
lnnvl(a>10) 等價於 nvl(a,0)<=10 等價於 a<=10 or a is null (假設a number(10))
說白了,lnnvl是一種特定的用於簡化表示式的函式,orcle解析的時候,應該會解析為 "a<=10 or a is null".
oracle 函式介紹之decode()
decode()函式簡介:
主要作用:將查詢結果翻譯成其他值(即以其他形式表現出來,以下舉例說明);
使用方法:
select decode(columnname,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值)
from talbename
where …
其中columnname為要選擇的table中所定義的column,
·含**釋:
decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值)的理解如下:
if (條件==值1)
then
return(翻譯值1)
elsif (條件==值2)
then
return(翻譯值2)
elsif (條件==值n)
then
return(翻譯值n)
else
return(預設值)
end if
注:其中預設值可以是你要選擇的column name 本身,也可以是你想定義的其他值,比如other等;
舉例說明:
現定義一table名為output,其中定義兩個column分別為monthid(var型)和sale(number型),若sale值=1000時翻譯為d,=2000時翻譯為c,=3000時翻譯為b,=4000時翻譯為a,如是其他值則翻譯為other;
sql如下:
select monthid , decode (sale,1000,'d',2000,'c',3000,'b',4000,'a',』other』) sale from output
特殊情況:
若只與乙個值進行比較
select monthid ,decode(sale, null,『---』,sale) sale from output
另:decode中可使用其他函式,如nvl函式或sign()函式等;
nvl(expr1,expr2)
若expr1是null,則返回expr2,否則返回expr1.
如果用到decode函式中就是
select monthid,decode(nvl(sale,6000),6000,'ng','ok') from output
sign()函式根據某個值是0、正數還是負數,分別返回0、1、-1,
如果取較小值就是
select monthid,decode(sign(sale-6000),-1,sale,6000) from output,即達到取較小值的目的。
oracle中使用sql查詢時字段為空則賦值預設
oracle 通過 nvl 函式sql 查詢時為 空值 賦預設值 oracle 函式介紹之nvl 函式宣告 nvl col,val 說明 當col為空時取val作為返回值,當col不為空時取col值。用處 最主要的是格式化資料,比如計算金額時,不想出現空資料,可以使用nvl jine,0 來得到0。...
sql中使用IF條件查詢
sql 使用場景 當其他模組插入關聯值不一致但是要作顯示時,可以使用鍊錶查詢,利用if來判斷並替換顯示 語句 select m.id,m.req raw material uuid,m.req raw task uuid,m.material info no,m.part no,m.grade na...
ORACLE中使用遞迴查詢
在資料庫查詢中常常會碰到要查詢樹形結構的資料,需要用乙個欄位的資料當做下一條記錄的父節點繼續查詢,如果在不知道有多少級節點的情況下一次次手寫sql查詢會很繁瑣而沒有效率,這時可以使用 oracle中的connect with prior遞迴演算法 oracle中start with.connect ...