DECODE 函數 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

DECODE 函數

DECODE 表達式會根據平等條件的結果,將特定值取代為另一個特定值或預設值。此操作等同於簡單CASE表達式或陳述式 IF-THEN-ELSE的操作。

語法

DECODE ( expression, search, result [, search, result ]... [ ,default ] )

這種表達式有助於將儲存於資料表中的縮寫或代碼,取代為報告所需的有意義商業值。

參數

運算式

您要比較之值的來源,例如資料表中的欄。

search

與來源表達式相比較的目標值,例如數值或字元字串。搜尋表達式必須評估為單一固定值。您不能指定會評估為一系列值的表達式,例如 age between 20 and 29;對於您要取代的每一個值,您需要指定個別的搜尋/結果對。

搜尋表達式的所有實例必須是相同或相容的資料類型。expressionsearch 參數也必須相容。

result

當表達式符合搜尋值時,查詢所傳回的替換值。您必須在DECODE運算式中包含至少一個搜尋/結果對。

結果表達式的所有實例必須是相同或相容的資料類型。resultdefault 參數也必須相容。

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)