本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DECODE 函數
DECODE 表達式會根據平等條件的結果,將特定值取代為另一個特定值或預設值。此操作等同於簡單CASE表達式或陳述式 IF-THEN-ELSE的操作。
語法
DECODE ( expression, search, result [, search, result ]... [ ,default ] )
這種表達式有助於將儲存於資料表中的縮寫或代碼,取代為報告所需的有意義商業值。
參數
- 運算式
-
您要比較之值的來源,例如資料表中的欄。
- search
-
與來源表達式相比較的目標值,例如數值或字元字串。搜尋表達式必須評估為單一固定值。您不能指定會評估為一系列值的表達式,例如
age between 20 and 29
;對於您要取代的每一個值,您需要指定個別的搜尋/結果對。搜尋表達式的所有實例必須是相同或相容的資料類型。expression 和 search 參數也必須相容。
- result
-
當表達式符合搜尋值時,查詢所傳回的替換值。您必須在DECODE運算式中包含至少一個搜尋/結果對。
結果表達式的所有實例必須是相同或相容的資料類型。result 和 default 參數也必須相容。
- default
-
搜尋條件失敗時用於案例的選用預設值。如果您未指定預設值,表示DECODE式會傳回 NULL。
使用須知
如果表達式值和搜尋值都是 NULL,則DECODE結果是對應的結果值。如需這樣使用函數的相關說明,請參閱「範例」一節。
以此方式使用 時, DECODE 類似於 NVL2 函數,但有一些差異。如需這些差異的說明,請參閱NVL2用量備註。
範例
當 datetable 的 caldate 欄中存在值 2008-06-01
時,下列範例會以 June 1st, 2008
取代此值。此範例會以 取代所有其他的 caldate 值NULL。
select decode(caldate, '2008-06-01', 'June 1st, 2008') from datetable where month='JUN' order by caldate; case ---------------- June 1st, 2008 ... (30 rows)
下列範例使用 DECODE運算式,將CATEGORY資料表中的五個縮寫CATNAME資料欄轉換為全名,並將資料欄中的其他值轉換為 Unknown
。
select catid, decode(catname, 'NHL', 'National Hockey League', 'MLB', 'Major League Baseball', 'MLS', 'Major League Soccer', 'NFL', 'National Football League', 'NBA', 'National Basketball Association', 'Unknown') from category order by catid; catid | case -------+--------------------------------- 1 | Major League Baseball 2 | National Hockey League 3 | National Football League 4 | National Basketball Association 5 | Major League Soccer 6 | Unknown 7 | Unknown 8 | Unknown 9 | Unknown 10 | Unknown 11 | Unknown (11 rows)
使用 DECODE表達式尋找科羅拉多州和內華達州的 VENUESEATS 欄中具有 NULL的場地;將 NULLs 轉換為零。如果資料VENUESEATS欄不是 NULL,則傳回 1 作為結果。
select venuename, venuestate, decode(venueseats,null,0,1) from venue where venuestate in('NV','CO') order by 2,3,1; venuename | venuestate | case ------------------------------+----------------+----------- Coors Field | CO | 1 Dick's Sporting Goods Park | CO | 1 Ellie Caulkins Opera House | CO | 1 INVESCO Field | CO | 1 Pepsi Center | CO | 1 Ballys Hotel | NV | 0 Bellagio Hotel | NV | 0 Caesars Palace | NV | 0 Harrahs Hotel | NV | 0 Hilton Hotel | NV | 0 ... (20 rows)