數據庫對null值的處理


Oracle排序中NULL值處理的五種常用方法

1、 缺省處理
 
Oracle在Order by 時缺省認為null是最大值,所以如果是ASC升序則排在最后,DESC降序則排在最前
2、 使用nvl 函數
 
nvl函數可以將輸入參數為空時轉換為一特定值,如
nvl(employee_name,’張三’)表示當employee_name為空時則返回’張三’,如果不為空則返回employee_name
通過這個函數可以定制null的排序位置。
3、 使用decode 函數
 
decode函數比nvl函數更強大,同樣它也可以將輸入參數為空時轉換為一特定值,如
decode(employee_name,null,’張三’, employee_name)表示當employee_name為空時則返回’張三’,如果不為空則返回employee_name
通過這個函數可以定制null的排序位置。
4、 使用case  語法
 
Case語法是 Oracle 9i后開始支持的,是一個比較靈活的語法,同樣在排序中也可以應用
如:
select *
  from employee
  order  by  ( case employee_name
             when  null  then
             '張三'
             else
             employee_name
           end)
表示當employee_name為空時則返回’張三’,如果不為空則返回employee_name
通過case語法同樣可以定制null的排序位置。
 
5、 使用nulls first  或者nulls last  語法
 
Nulls first和nulls last是Oracle Order by支持的語法
如果Order by 中指定了表達式Nulls first則表示null值的記錄將排在最前(不管是asc 還是 desc)
如果Order by 中指定了表達式Nulls last則表示null值的記錄將排在最后 (不管是asc 還是 desc)
使用語法如下:
--將nulls始終放在最前
select *  from zl_cbqc  order  by cb_ld  nulls  first
 
--將nulls始終放在最后
select *  from zl_cbqc  order  by cb_ld  desc  nulls  last

MySQL中的isnull、ifnull和nullif函數用法

isnull(expr)

如expr為null,那么isnull()的返回值為1,否則返回值為0。

mysql>select isnull(1+1);

->0

mysql>select isnull(1/0);

->1

使用=的null值對比通常是錯誤的。

isnull()函數同is null比較操作符具有一些相同的特性。請參見有關is null 的說明。

ifnull(expr1,expr2)

假如expr1不為NULL,則IFNULL()的返回值為expr1; 否則其返回值為expr2。IFNULL()的返回值是數字或是字符串,具體情況取決於其所使用的語境。

mysql>SELECT IFNULL(1,0);

->1

mysql>SELECT IFNULL(NULL,10);

->10

mysql>SELECT IFNULL(1/0,10);

->10

mysql>SELECT IFNULL(1/0,'yes');

->'yes'

ifnull(expr1,expr2)的默認結果值為兩個表達式中更加“通用”的一個,順序為STRING、REAL或INTEGER。假設一個基於表達式的表的情況,或MySQL必須在內存儲器中儲存一個臨時表中IFNULL()的返回值:

CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;

在這個例子中,測試列的類型為 CHAR(4)。

nullif(expr1,expr2)

如果expr1=expr2成立,那么返回值為NULL,否則返回值為expr1。這和

CASE WHEN expr1=expr2 THEN NULL

ELSE

expr1

END相同。

mysql>SELECT NULLIF(1,1);

->NULL

mysql>SELECT NULLIF(1,2);

->1

如果參數不相等,則MySQL兩次求得的值為expr1 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM