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。

使用須知

如果 expression 值和 search 值都是 Null,則 DECODE 結果是對應的 result 值。如需這樣使用函數的相關說明,請參閱「範例」一節。

這樣使用時,DECODE 就類似於 NVL2 函數,但有些差異。如需這些差異的描述,請參閱 NVL2 使用須知。

範例

當 datetable 的 caldate 欄中存在值 2008-06-01 時,下列範例會以 June 1st, 2008 取代此值。範例以 NULL 取代其他所有 caldate 值。

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 的會場;將 NULL 轉換為零。如果 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)