標籤:
DECODE翻譯為解碼或解碼,因為它可以把查詢結果翻譯成令使用者容易理解的內容。
文法:
expr: 運算式
search:搜尋值
result:結果值
default:預設值
DECODE函數的第一個參數是運算式,之後是成對的搜尋值-結果值,最後是一個預設值。參數可以是任何數字類型或字元類型。
DECODE函數的作用是把運算式的的值與一些列搜尋值比較,當運算式的值與搜尋值相等時,返回搜尋值對應的結果值,如果沒有找到相等的搜尋值,則返回預設值,如果預設值沒有定義,返回NULL。執行邏輯跟CASE語句很相似。
參數類型的處理方式如下:
- 如果運算式和搜尋值是字元資料,Oracle採用nonpadded semantics比較它們。結果值是VARCHAR2類型,並與第一個結果值的字元集相同。
- 如果第一對搜尋值-結果值為數字類型,Oracle會比較所有的搜尋值-結果值及運算式,按數字優先順序來決定參數類型,並把其它參數的類型轉換為該類型。
搜尋值、結果值和預設值可以由運算式(不是指第一個運算式參數)計算。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。
SELECT
product_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";
Oracle函數-DECODE