

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# DECODE 函數
<a name="r_DECODE_expression"></a>

DECODE 表達式將特定值取代為另一個特定值或預設值，視等式條件的結果而定。此運算相當於簡單 CASE 表達式或 IF-THEN-ELSE 陳述式的運算。

## 語法
<a name="r_DECODE_expression-synopsis"></a>

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

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

## Parameters
<a name="r_DECODE_expression-parameters"></a>

 *表達式*   
您要比較之值的來源，例如資料表中的欄。

 *search*   
與來源表達式相比較的目標值，例如數值或字元字串。搜尋表達式必須評估為單一固定值。您不能指定會評估為一系列值的表達式，例如 `age between 20 and 29`；對於您要取代的每一個值，您需要指定個別的搜尋/結果對。  
搜尋表達式的所有實例必須是相同或相容的資料類型。*expression* 和 *search* 參數也必須相容。

 *result*   
當表達式符合搜尋值時，查詢所傳回的替換值。DECODE 表達式必須包含至少一對搜尋/結果。  
結果表達式的所有實例必須是相同或相容的資料類型。*result* 和 *default* 參數也必須相容。

 *default*   
搜尋條件失敗時用於案例的選用預設值。如果您未指定預設值，DECODE 表達式會傳回 Null。

## 使用須知
<a name="decode-expression-usage-notes"></a>

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

這樣使用時，DECODE 就類似於 [NVL2 函數](r_NVL2.md)，但有些差異。如需這些差異的描述，請參閱 NVL2 使用須知。

## 範例
<a name="r_DECODE_expression-examples"></a>

當 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)
```