轉換語系

2008年1月27日 星期日

Oracle 排序欄位 有NULL值處理方法

Oracle 排序欄位 有NULL值處理方法

Oracle在Order by 時會預設認為null是最大值,所以如果是ASC升序則排在最後,DESC降序則排在最前

有幾種方式可以處理排序欄位有 null 值,大致如下:

1.使用nulls first 或者nulls last 語法

Nulls first和nulls last是Oracle Order by支援的語法 (mysql 不支援 ,但此為 SQL 99 standard 語法)

如果Order by 中指定了運算式 Nulls first則表示null值的記錄將排在最前(不管是asc 還是 desc)
反之 Nulls last則表示null值的記錄將排在最後 (不管是asc 還是 desc)
使用語法如下:

--將nulls始終放在最後
select * from products order by order_date desc nulls last

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的排序位置。

沒有留言: