

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

# 陣列函數
<a name="Array_Functions"></a>

本節說明 中支援的 SQL 陣列函數 AWS Clean Rooms。

**Topics**
+ [ARRAY 函數](array.md)
+ [ARRAY\$1CONTAINS 函數](array_contains.md)
+ [ARRAY\$1DISTINCT 函數](array_distinct.md)
+ [ARRAY\$1EXCEPT 函數](array_except.md)
+ [ARRAY\$1INTERSECT 函數](array_intersect.md)
+ [ARRAY\$1JOIN 函數](array_join.md)
+ [ARRAY\$1REMOVE 函數](array_remove.md)
+ [ARRAY\$1UNION 函數](array_union.md)
+ [EXPLODE 函數](explode.md)
+ [FLATTEN 函數](flatten.md)

# ARRAY 函數
<a name="array"></a>

建立具有指定元素的陣列。

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

```
ARRAY( [ expr1 ] [ , expr2 [ , ... ] ] )
```

## 引數
<a name="array-argument"></a>

 *expr1, expr2*   
除了日期和時間類型之外的任何資料類型的表達式。引數不需要是相同的資料類型。

## 傳回類型
<a name="array-return-type"></a>

陣列函數會傳回包含表達式中元素的 ARRAY。

## 範例
<a name="array-example"></a>

下列範例顯示數值的陣列和不同資料類型的陣列。

```
--an array of numeric values
select array(1,50,null,100);
      array
------------------
 [1,50,null,100]
(1 row)

--an array of different data types
select array(1,'abc',true,3.14);
        array
-----------------------
 [1,"abc",true,3.14]
(1 row)
```

# ARRAY\$1CONTAINS 函數
<a name="array_contains"></a>

ARRAY\$1CONTAINS 函數可用於對陣列資料結構執行基本成員資格檢查。當您需要檢查陣列中是否存在特定值時，ARRAY\$1CONTAINS 函數很有用。

## 語法
<a name="array_contains-syntax"></a>

```
array_contains(array, value)
```

## 引數
<a name="array_contains-arguments"></a>

 *陣列*  
要搜尋的 ARRAY。

 *值*  
具有與陣列元素共用最小常見類型的 運算式。

## 傳回類型
<a name="array_contains-return-type"></a>

ARRAY\$1CONTAINS 函數會傳回 BOOLEAN。

如果值為 NULL，則結果為 NULL。

如果陣列中的任何元素為 NULL，如果值與任何其他元素不相符，則結果為 NULL。

## 範例
<a name="array_contains-example"></a>

下列範例會檢查陣列是否`[1, 2, 3]`包含值 `4`。由於陣列 `[1, 2, 3`】 不包含值 `4`，因此 array\$1contains 函數會傳回 `false`。

```
SELECT array_contains(array(1, 2, 3), 4)
false
```

下列範例會檢查陣列是否`[1, 2, 3]`包含值 `2`。由於陣列`[1, 2, 3]`確實包含值 `2`，因此 array\$1contains 函數會傳回 `true`。

```
SELECT array_contains(array(1, 2, 3), 2);
 true
```

# ARRAY\$1DISTINCT 函數
<a name="array_distinct"></a>

ARRAY\$1DISTINCT 函數可用來從陣列中移除重複值。當您需要從陣列移除重複項目並僅使用唯一元素時，ARRAY\$1DISTINCT 函數非常有用。這在您想要在資料集上執行操作或分析，而不會干擾重複值的情況下很有用。

## 語法
<a name="array_distinct-syntax"></a>

```
array_distinct(array)
```

## 引數
<a name="array_distinct-arguments"></a>

 *陣列*  
ARRAY 表達式。

## 傳回類型
<a name="array_distinct-return-type"></a>

ARRAY\$1DISTINCT 函數會傳回只包含輸入陣列中唯一元素的 ARRAY。

## 範例
<a name="array_distinct-example"></a>

在此範例中，輸入陣列`[1, 2, 3, null, 3]`包含重複的 值`3`。`array_distinct` 函數會移除此重複值，`3`並傳回具有唯一元素的新陣列：`[1, 2, 3, null]`。

```
SELECT array_distinct(array(1, 2, 3, null, 3));
 [1,2,3,null]
```

在此範例中，輸入陣列`[1, 2, 2, 3, 3, 3]`包含 `2`和 的重複值`3`。`array_distinct` 函數會移除這些重複項目，並傳回具有唯一元素的新陣列：`[1, 2, 3]`。

```
SELECT array_distinct(array(1, 2, 2, 3, 3, 3))
  [1,2,3]
```

# ARRAY\$1EXCEPT 函數
<a name="array_except"></a>

ARRAY\$1EXCEPT 函數會採用兩個陣列做為引數，並傳回僅包含存在於第一個陣列中但不包含第二個陣列之元素的新陣列。

當您需要尋找一個陣列與另一個陣列相比唯一的元素時，ARRAY\$1EXCEPT 非常有用。這在您需要在陣列上執行類似集合的操作時很有用，例如尋找兩組資料之間的差異。

## 語法
<a name="array_except-syntax"></a>

```
array_except(array1, array2)
```

## 引數
<a name="array_except-arguments"></a>

 *array1*  
具有類似元素的任何類型的 ARRAY。

 *array2*  
元素的 ARRAY，與 *array1* 元素共用最不常見的類型。

## 傳回類型
<a name="array_except-return-type"></a>

ARRAY\$1EXCEPT 函數會將符合類型的 ARRAY 傳回至 *array1*，而沒有重複項目。

## 範例
<a name="array_except-example"></a>

在此範例中，第一個陣列`[1, 2, 3]`包含元素 1、2 和 3。第二個陣列`[2, 3, 4]`包含元素 2、3 和 4。`array_except` 函數會從第一個陣列中移除元素 2 和 3，因為它們也存在於第二個陣列中。產生的輸出是陣列 `[1]`。

```
SELECT array_except(array(1, 2, 3), array(2, 3, 4))
  [1]
```

在此範例中，第一個陣列`[1, 2, 3]`包含元素 1、2 和 3。第二個陣列`[1, 3, 5]`包含元素 1、3 和 5。`array_except` 函數會從第一個陣列中移除元素 1 和 3，因為它們也存在於第二個陣列中。產生的輸出是陣列 `[2]`。

```
SELECT array_except(array(1, 2, 3), array(1, 3, 5));
 [2]
```

# ARRAY\$1INTERSECT 函數
<a name="array_intersect"></a>

ARRAY\$1INTERSECT 函數採用兩個陣列做為引數，並傳回包含兩個輸入陣列中存在元素的新陣列。當您需要尋找兩個陣列之間的常見元素時，此函數很有用。這在您需要在陣列上執行類似集合的操作時很有用，例如尋找兩組資料之間的交集。

## 語法
<a name="array_intersect-syntax"></a>

```
array_intersect(array1, array2)
```

## 引數
<a name="array_intersect-arguments"></a>

 *array1*  
具有類似元素的任何類型的 ARRAY。

 *array2*  
元素的 ARRAY，與 array1 元素共用最不常見的類型。

## 傳回類型
<a name="array_intersect-return-type"></a>

ARRAY\$1INTERSECT 函數會將符合類型的 ARRAY 傳回至 array1，而 array1 和 array2 中不包含重複項目和元素。

## 範例
<a name="array_intersect-example"></a>

在此範例中，第一個陣列`[1, 2, 3]`包含元素 1、2 和 3。第二個陣列`[1, 3, 5]`包含元素 1、3 和 5。ARRAY\$1INTERSECT 函數會識別兩個陣列之間的常見元素，也就是 1 和 3。產生的輸出陣列為 `[1, 3]`。

```
SELECT array_intersect(array(1, 2, 3), array(1, 3, 5));
 [1,3]
```

# ARRAY\$1JOIN 函數
<a name="array_join"></a>

ARRAY\$1JOIN 函數需要兩個引數：第一個引數是將聯結的輸入陣列。第二個引數是用來串連陣列元素的分隔符號字串。當您需要將字串陣列 （或任何其他資料類型） 轉換為單一串連字串時，此函數非常有用。這在您想要以單一格式化字串呈現一系列值的情況下很有用，例如用於顯示目的或用於進一步處理。

## 語法
<a name="array_join-syntax"></a>

```
array_join(array, delimiter[, nullReplacement])
```

## 引數
<a name="array_join-arguments"></a>

 *陣列*  
任何 ARRAY 類型，但其元素會解譯為字串。

 *delimiter*  
用來分隔串連陣列元素的 STRING。

 *nullReplacement*  
用於在結果中表達 NULL 值的 STRING。

## 傳回類型
<a name="array_join-return-type"></a>

ARRAY\$1JOIN 函數會傳回 STRING，其中陣列元素以分隔符號分隔，而 null 元素會替換為 `nullReplacement`。如果省略 `nullReplacement` ，則會篩選掉`null`元素。如果任何引數為 `NULL`，則結果為 `NULL`。

## 範例
<a name="array_join-example"></a>

在此範例中，ARRAY\$1JOIN 函數採用陣列`['hello', 'world']`，並使用分隔符號 `' '`（空格字元） 聯結元素。產生的輸出是字串 `'hello world'`。

```
SELECT array_join(array('hello', 'world'), ' ');
 hello world
```

在此範例中，ARRAY\$1JOIN 函數採用陣列`['hello', null, 'world']`，並使用分隔符號 `' '`（空格字元） 聯結元素。該`null`值會以提供的取代字串 `','`（逗號） 取代。產生的輸出是字串 `'hello , world'`。

```
SELECT array_join(array('hello', null ,'world'), ' ', ',');
 hello , world
```

# ARRAY\$1REMOVE 函數
<a name="array_remove"></a>

ARRAY\$1REMOVE 函數採用兩個引數：第一個引數是將元素從中移除的輸入陣列。第二個引數是從陣列中移除的值。當您需要從陣列中移除特定元素時，此函數很有用。這在您需要對 值陣列執行資料清理或預先處理的情況下很有用。

## 語法
<a name="array_remove-syntax"></a>

```
array_remove(array, element)
```

## 引數
<a name="array_remove-arguments"></a>

 *陣列*  
ARRAY。

 *元素*  
與陣列元素共用最小常見類型的類型表達式。

## 傳回類型
<a name="array_remove-return-type"></a>

ARRAY\$1REMOVE 函數會傳回符合陣列類型的結果類型。如果要移除的元素為 `NULL`，則結果為 `NULL`。

## 範例
<a name="array_remove-example"></a>

在此範例中，ARRAY\$1REMOVE 函數會取得陣列，`[1, 2, 3, null, 3]`並移除值 3 的所有出現次數。產生的輸出是陣列 `[1, 2, null]`。

```
SELECT array_remove(array(1, 2, 3, null, 3), 3);
 [1,2,null]
```

# ARRAY\$1UNION 函數
<a name="array_union"></a>

ARRAY\$1UNION 函數採用兩個陣列做為引數，並傳回包含兩個輸入陣列中唯一元素的新陣列。當您需要結合兩個陣列並消除任何重複的元素時，此函數很有用。這在您需要在陣列上執行類似集合的操作的情況下很有用，例如尋找兩組資料之間的聯集。

## 語法
<a name="array_union-syntax"></a>

```
array_union(array1, array2)
```

## 引數
<a name="array_union-arguments"></a>

 *array1*  
ARRAY。

 *array2*  
與 *array1* 相同類型的 ARRAY。

## 傳回類型
<a name="array_union-return-type"></a>

ARRAY\$1UNION 函數會傳回與陣列相同類型的 ARRAY。

## 範例
<a name="array_union-example"></a>

在此範例中，第一個陣列`[1, 2, 3]`包含元素 1、2 和 3。第二個陣列`[1, 3, 5]`包含元素 1、3 和 5。ARRAY\$1UNION 函數結合了兩個陣列的唯一元素，進而產生輸出陣列 `[1, 2, 3, 5]`。T

```
SELECT array_union(array(1, 2, 3), array(1, 3, 5));
 [1,2,3,5]
```

# EXPLODE 函數
<a name="explode"></a>

EXPLODE 函數用於將具有陣列或映射資料欄的單一資料列轉換為多個資料列，其中每個資料列對應至陣列或映射中的單一元素。

## 語法
<a name="explode-syntax"></a>

```
explode(expr)
```

## 引數
<a name="explode-arguments"></a>

 *expr*  
陣列表達式或映射表達式。

## 傳回類型
<a name="explode-return-type"></a>

EXPLODE 函數會傳回一組資料列，其中每一列代表輸入陣列或映射中的單一元素。

輸出列的資料類型取決於輸入陣列或映射中元素的資料類型。

## 範例
<a name="explode-example"></a>

下列範例採用單列陣列 【10、20】，並將其轉換為兩個不同的列，每個列都包含其中一個陣列元素 (10 和 20)。

```
SELECT explode(array(10, 20));
```

在第一個範例中，輸入陣列直接做為引數傳遞給 `explode()`。在此範例中，使用語法指定輸入陣列，其中明確提供資料欄名稱 `=>` (`collection`)。

```
SELECT explode(array(10, 20));
```

這兩種方法都是有效的，並達到相同的結果，但當您需要從較大的資料集分解資料欄時，第二個語法會更有用，而不只是簡單的陣列常值。

# FLATTEN 函數
<a name="flatten"></a>

FLATTEN 函數用於將巢狀陣列結構「平面化」為單一平面陣列。

## 語法
<a name="flatten-syntax"></a>

```
flatten(arrayOfArrays)
```

## 引數
<a name="flatten-arguments"></a>

 *arrayOfArrays*  
陣列陣列。

## 傳回類型
<a name="flatten-return-type"></a>

FLATTEN 函數會傳回陣列。

## 範例
<a name="flatten-example"></a>

在此範例中，輸入是具有兩個內部陣列的巢狀陣列，而輸出是包含內部陣列中所有元素的單一扁平陣列。FLATTEN 函數採用巢狀陣列，`[[1, 2], [3, 4]]`並將所有元素合併為單一陣列`[1, 2, 3, 4]`。

```
SELECT flatten(array(array(1, 2), array(3, 4)));
 [1,2,3,4]
```