DECODE翻譯為解碼或解碼,因為它可以把查詢結果翻譯成令用戶容易理解的內容。 語法: expr: 表達式 search:搜索值 result:結果值 default:預設值 DECODE函數的第一個參數是表達式,之後是成對的搜索值-結果值,最後是一個預設值。參數可以是任何數字類型或字元類型。 DE ...
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";