

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

# 條件函數
<a name="s3-select-sql-reference-conditional"></a>

**重要**  
Amazon S3 Select 不再提供給新客戶。Amazon S3 Select 的現有客戶可以繼續照常使用此功能。[進一步了解](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select 支援下列條件函數。

**Topics**
+ [CASE](#s3-select-sql-reference-case)
+ [COALESCE](#s3-select-sql-reference-coalesce)
+ [NULLIF](#s3-select-sql-reference-nullif)

## CASE
<a name="s3-select-sql-reference-case"></a>

`CASE` 運算式是條件式運算式，類似於其他語言中的 `if/then/else` 陳述式。有多個條件時會使用 `CASE` 來指定結果。`CASE` 表達式有兩種類型：簡單和搜尋。

在簡單 `CASE` 運算式中，表達式與值相比較。發現相符時，就套用 `THEN` 子句中指定的動作。未發現相符時，就套用 `ELSE` 子句中的動作。

在搜尋 `CASE` 運算式中，每一個 `CASE` 的評估根據為布林值運算式，而 `CASE` 陳述式會傳回第一個相符的 `CASE`。如果在 `WHEN` 子句之間找不到相符的 `CASE`，就傳回 `ELSE` 子句中的動作。

### 語法
<a name="s3-select-sql-reference-case-syntax"></a>

**注意**  
目前，Amazon S3 Select 不支援 `ORDER BY` 或包含新行的查詢。請務必使用沒有分行符號的查詢。

以下是用來比對條件的簡單 `CASE` 陳述式：

```
CASE expression WHEN value THEN result [WHEN...] [ELSE result] END					
```

以下是用來評估每一個條件的搜尋 `CASE` 陳述式：

```
CASE WHEN boolean condition THEN result [WHEN ...] [ELSE result] END					
```

### 範例
<a name="s3-select-sql-reference-case-examples"></a>

**注意**  
如果您使用 Amazon S3 主控台執行以下範例，並且 CSV 檔案包含標題列，請選擇**排除 CSV 資料的第一行**。

**範例 1：**使用簡單的 `CASE` 運算式在查詢中以 `Big Apple` 替換 `New York City`。以 `other` 取代其他所有城市名稱。

```
SELECT venuecity, CASE venuecity WHEN 'New York City' THEN 'Big Apple' ELSE 'other' END FROM S3Object;
```

查詢結果：

```
venuecity        |   case
-----------------+-----------
Los Angeles      | other
New York City    | Big Apple
San Francisco    | other
Baltimore        | other
...
```

**範例 2：**使用搜尋 `CASE` 運算式以根據個別門票銷售的 `pricepaid` 值來指派群組號碼：

```
SELECT pricepaid, CASE WHEN CAST(pricepaid as FLOAT) < 10000 THEN 'group 1' WHEN CAST(pricepaid as FLOAT) > 10000 THEN 'group 2' ELSE 'group 3' END FROM S3Object;					
```

查詢結果：

```
pricepaid |  case
-----------+---------
12624.00 | group 2
10000.00 | group 3
10000.00 | group 3
9996.00 | group 1
9988.00 | group 1
...
```

## COALESCE
<a name="s3-select-sql-reference-coalesce"></a>

`COALESCE` 依順序評估引數，並傳回第一個非不明值，也就是第一個非空值或非遺失值。此函數不會傳播 null 值和遺失值。

### 語法
<a name="s3-select-sql-reference-coalesce-syntax"></a>

```
COALESCE ( expression, expression, ... )
```

### Parameters
<a name="s3-select-sql-reference-coalesce-parameters"></a>

 *`expression`*   
該函數對其運作的目標運算式。

### 範例
<a name="s3-select-sql-reference-coalesce-examples"></a>

```
COALESCE(1)                -- 1
COALESCE(null)             -- null
COALESCE(null, null)       -- null
COALESCE(missing)          -- null
COALESCE(missing, missing) -- null
COALESCE(1, null)          -- 1
COALESCE(null, null, 1)    -- 1
COALESCE(null, 'string')   -- 'string'
COALESCE(missing, 1)       -- 1
```

## NULLIF
<a name="s3-select-sql-reference-nullif"></a>

由於有兩個運算式，如果兩個運算式評估為相同的值，則 `NULLIF` 會傳回 `NULL` 值，否則 `NULLIF` 會傳回第一個運算式評估的結果。

### 語法
<a name="s3-select-sql-reference-nullif-syntax"></a>

```
NULLIF ( expression1, expression2 )
```

### Parameters
<a name="s3-select-sql-reference-nullif-parameters"></a>

 `expression1, expression2`   
該函數對其運作的目標運算式。

### 範例
<a name="s3-select-sql-reference-nullif-examples"></a>

```
NULLIF(1, 1)             -- null
NULLIF(1, 2)             -- 1
NULLIF(1.0, 1)           -- null
NULLIF(1, '1')           -- 1
NULLIF([1], [1])         -- null
NULLIF(1, NULL)          -- 1
NULLIF(NULL, 1)          -- null
NULLIF(null, null)       -- null
NULLIF(missing, null)    -- null
NULLIF(missing, missing) -- null
```