oracle 對查詢結果進行排序時,被排序的欄位存在null值,且要指定Null值排在最前面或者最後面,本文將介紹如何處理oracle 空值排序,需要的朋友可以參考下:
適用情況:
oracle 對查詢結果進行排序時,被排序的欄位存在null值,且要指定Null值排在最前面或者最後面
關鍵字:Nulls First;Nulls Last
預設情況:null 預設為最大值(即:asc 昇冪<小-->大>,null值排在最後;desc 降冪<大-->小>,null值排在最前面)
指定:
1.Oracle Order by支援的語法
2.指定Nulls first 則表示null值的記錄將排在最前(不管是asc 還是desc)
3.指定Nulls last 則表示null值的記錄將排在最後(不管是asc 還是desc)
語法舉例:(Table:Tab_A 有部分空值的欄位Col_A)
select * from Tab_A order by Tab_A. Col_A (asc/desc) nulls first------>null 值排在最前面
select * from Tab_A order by Tab_A. Col_A (asc/desc) nulls last ------>null 值排在最後面
其他方法:
在order by 的時候,用Nvl、NVL2 、Decode、case .....when....end;等函數對欄位的null值進行處理
例如:select * from Tab_A order by NVL(Tab_A. Col_A,'abc' ) (asc/desc);
對於Nvl()函數
如果是空值就替換成另一個值如nvl(欄位,‘x’)欄位值等於null就這個函數得到的結果就是'x',一般用於存在空值比較的情況下,比如欄位a與欄位b都是int型,其中一個等於null另一個為非空值,你使用a<>b是不成立的,
使用此條件查詢你將丟失這條本來不相等的資料,可以如此用法nvl(欄位,-1)<>nvl(欄位,-1),這樣就可以得到想要查詢的資料,當然查詢資料的前提是此欄位值不能有-1值才能用這種寫法。
對於NVL2函數
NVL2(expr1,expr2,expr3)
功能:如果參數運算式expr1值為Null,則NVL2()函數返回參數運算式expr3的值;如果參數運算式expr1值不為Null,則NVL2()函數返回參數運算式expr2的值。NVL( string1, replace_with) 功能:如果string1為Null,則
NVL函數返回replace_with的值,否則返回string1的值,如果兩個參數都為Null ,則返回Null。www.it165.net
以下為網上搜到的實際例子的另一種處理方式:
問題描述:
在處理一般的資料記錄中,對於數位類型的欄位,在oracle的排序中,預設把null值做為
大於任何數位的類型,當然對於Varchar2類型的欄位,預設也是該處理方式,但是客戶
要求排序的過程中,需要把null的欄位預設排在前邊(從小-->大)。一般的
order by xxxx,無法解決。
問題解決:
方案1:
可以使用複雜的使用sql:
方案2:
可以利用oracle中可以對order by中對比較欄位做設置的方式來實現:
如: ......order by nvl( aaa,’-1’)
全站熱搜
留言列表