DECODE翻譯為解碼或譯碼,因為它可以把查詢結果翻譯成令用戶容易理解的內容。
語法:
expr: 表達式
search:搜索值
result:結果值
default:默認值
DECODE函數的第一個參數是表達式,之後是成對的搜索值-結果值,最後是一個默認值。參數可以是任何數字類型或字符類型。
DECODE函數的作用是把表達式的的值與一些列搜索值比較,當表達式的值與搜索值相等時,返回搜索值對應的結果值,如果沒有找到相等的搜索值,則返回默認值,如果默認值沒有定義,返回NULL。執行邏輯跟CASE語句很相似。
參數類型的處理方式如下:
搜索值、結果值和默認值可以由表達式(不是指第一個表達式參數)計算。Oracle數據庫使用短路計算的方式,僅在比較每個搜索值與表達式時才結算搜索值,而不是一次計算所有的搜索值。因此Oracle在找到等於表達式的值後,即使後面還有搜索值,也不會去計算它。
Oracle在比較表達式和每個搜索值時,先把它們轉換為第一個搜索值得數據類型。Oracle自動將返回的結果值轉換為第一個結果值的數據類型。如果第一個結果值的數據類型為CHAR或NULL,那麼Oracle會將結果值轉換為VARCHAR2。
在DECODE函數中,Oracle認為兩個NULL值是相等的,如果表達式為NULL,Oracle返回第一個為NULL的搜索值的結果值。
DECODE參數的最大數量為255個。
下面的例子演示了DECODE函數的使用。DECODE將warehouse_id的值翻譯成容易理解的字符串。如果warehouse_id的值是1,函數返回Southlake,如果warehouse_id的值是2,函數返回San Francisco。。。如果warehouse_id的值不是1,2,3,4,則返回Non domestic。
SELECTproduct_id, DECODE (warehouse_id, 1, 'Southlake', 2, 'San Francisco', 3, 'New Jersey', 4, 'Seattle', 'Non domestic') "Location" FROM inventories WHERE product_id < 1775 ORDER BY product_id, "Location";