
# 数组函数
本文介绍数组函数的语法规则，包括参数解释、函数示例等。
#### 函数列表
表1数组函数 
| 函数                                                                                                                                                                                   | 描述                                    |
|:---|:---|
| [array函数]          | 将输入的参数构造成数组，参数类型必须相同。                 |
| [array_position函数] | 获取指定元素的下标，下标从1开始。如果指定元素不存在，则返回0。      |
| [cardinality函数]    | 计算数组中元素的个数。                           |
| [mv_length函数]      | 计算数组中元素的个数， 同cardinality。             |
| [contains函数]       | 判断数组中是否包含指定元素。如果包含，则返回true。           |
| [mv_contains函数]    | 判断数组中是否包含指定元素。如果包含，则返回true，同contains。 |
| [mv_prepend函数]     | 将指定的元素添加到数组的开始位置。                     |
| [mv_append函数]      | 将指定的元素添加到数组的末尾。                       |
| [mv_slice函数]       | 返回从start到end索引的数组。                    |
| [mv_to_string函数]   | 使用指定的分隔符str连接arr所有元素。                 |
| [string_to_mv函数]   | 使用指定的分隔符str2将str1拆分为数组                |
| [mv_offset函数]      | 返回所提供的基于0的索引处的数组元素。                   |
| [mv_ordinal函数]     | 返回所提供的基于1的索引处的数组元素。                   |
| [mv_offset_of函数]   | 返回数组中第一次出现expr的基于0的索引，如果未出现，则返回-1。    |
| [mv_ordinal_of函数]  | 返回数组中第一次出现expr的基于1的索引，如果未出现，则返回-1。    |
   
 #### array函数
将参数构建成数组，参数类型必须相同。
语法：array\[expr1,expr ...\]
表2参数说明 
| 参数名称 | 描述   | 类型                               | 是否必选 |
|:---|:---|:---|:---|
| expr | 原始数据 | String/Integer/Long/Double/Float | 是    |
   
返回值类型：Array类型
示例：SELECT ARRAY\['1','2','3','4','5'\]
表3查询分析结果 
| 类型 | 查询语句                         | 返回结果                        |
|:---|:---|:---|
| 场景 | ARRAY\['1','2','3','4','5'\] | \["1", "2", "3", "4", "5"\] |
   
 #### array_position函数
获取指定元素的下标，下标从1开始。如果指定元素不存在，则返回0。
语法：array_position(expr, ele)
表4参数说明 
| 参数名称 | 描述    | 类型                     | 是否必选 |
|:---|:---|:---|:---|
| expr | 原始数组  | 数组类型。                  | 是    |
| ele  | 指定的元素 | 数组中的一个元素，必须与数组中元素类型相同。 | 是    |
   
返回值类型：Integer类型
示例：SELECT ARRAY_POSITION(ARRAY\['1','2','3'\],'2')
表5查询分析结果 
| 类型 | 查询语句                                     | 返回结果 |
|:---|:---|:---|
| 场景 | ARRAY_POSITION(ARRAY\['1','2','3'\],'2') | 2    |
   
 #### cardinality函数
计算数组中元素的个数，参数类型必须相同。
语法：cardinality(expr)
表6参数说明 
| 参数名称 | 描述   | 类型                   | 是否必选 |
|:---|:---|:---|:---|
| expr | 原始数组 | Array（String/Number） | 是    |
   
返回值类型：Integer类型
示例：SELECT CARDINALITY(ARRAY\['1','2','3'\])
表7查询分析结果 
| 类型 | 查询语句                              | 返回结果 |
|:---|:---|:---|
| 场景 | CARDINALITY(ARRAY\['1','2','3'\]) | 3    |
   
 #### mv_length函数
计算数组中元素的个数， 同cardinality。
语法：mv_length(expr)
表8参数说明 
| 参数名称 | 描述   | 类型                   | 是否必选 |
|:---|:---|:---|:---|
| expr | 原始数组 | Array（String/Number） | 是    |
   
返回值类型：Integer类型
示例：SELECT MV_LENGTH(ARRAY\['1','2','3'\])
表9查询分析结果 
| 类型 | 查询语句                             | 返回结果 |
|:---|:---|:---|
| 场景 | MV_LENGTH (ARRAY\['1','2','3'\]) | 3    |
   
 #### contains函数
判断数组中是否包含指定元素。如果包含，则返回true。
语法：contains(expr, ele)
表10参数说明 
| 参数名称 | 描述    | 类型                          | 是否必选 |
|:---|:---|:---|:---|
| expr | 原始数组  | Array（String/Number）        | 是    |
| ele  | 指定的元素 | String/Number，必须与数组中元素类型相同。 | 是    |
   
返回值类型：Boolean类型
示例：SELECT CONTAINS(ARRAY\['1','2'\],'1')
表11查询分析结果 
| 类型 | 查询语句                           | 返回结果 |
|:---|:---|:---|
| 场景 | CONTAINS(ARRAY\['1','2'\],'1') | true |
   
 #### mv_contains函数
判断数组中是否包含指定元素。如果包含，则返回true，同contains。
语法：mv_contains(expr, ele)
表12参数说明 
| 参数名称 | 描述    | 类型                          | 是否必选 |
|:---|:---|:---|:---|
| expr | 原始数组  | Array（String/Number）        | 是    |
| ele  | 指定的元素 | String/Number，必须与数组中元素类型相同。 | 是    |
   
返回值类型：Boolean类型
示例：SELECT MV_CONTAINS(ARRAY\['1','2'\],'1')
表13查询分析结果 
| 类型 | 查询语句                              | 返回结果 |
|:---|:---|:---|
| 场景 | MV_CONTAINS(ARRAY\['1','2'\],'1') | true |
   
 #### mv_prepend函数
将指定的元素添加到数组的开始位置。
语法：mv_prepend(expr, arr)
表14参数说明 
| 参数名称 | 描述    | 类型                          | 是否必选 |
|:---|:---|:---|:---|
| expr | 指定的元素 | String/Number，必须与数组中元素类型相同。 | 是    |
| arr  | 原始数组  | Array（String/Number）        | 是    |
   
返回值类型：Array类型
示例：SELECT MV_PREPEND('1', ARRAY \['1','2'\])
表15查询分析结果 
| 类型 | 查询语句                               | 返回结果            |
|:---|:---|:---|
| 场景 | MV_PREPEND ('1', ARRAY\['1','2'\]) | \["1","1","2"\] |
   
 #### mv_append函数
将指定的元素添加到数组的末尾。
语法：mv_append(arr, expr)
表16参数说明 
| 参数名称 | 描述    | 类型                          | 是否必选 |
|:---|:---|:---|:---|
| arr  | 原始数组  | Array（String/Number）        | 是    |
| expr | 指定的元素 | String/Number，必须与数组中元素类型相同。 | 是    |
   
返回值类型：Array类型
示例：SELECT MV_APPEND(ARRAY\['1','2'\],'1')
表17查询分析结果 
| 类型 | 查询语句                             | 返回结果            |
|:---|:---|:---|
| 场景 | MV_APPEND(ARRAY\['1','2'\], '1') | \["1","2","1"\] |
   
 #### mv_slice函数
返回从start到end索引的数组。
语法：mv_slice(arr, start, end)
表18参数说明 
| 参数名称  | 描述   | 类型                   | 是否必选 |
|:---|:---|:---|:---|
| arr   | 原始数组 | Array（String/Number） | 是    |
| start | 起始位置 | Integer              | 是    |
| end   | 结束位置 | Integer              | 是    |
   
返回值类型：Array类型
示例：SELECT MV_SLICE(ARRAY\['1','2','3','4','5'\], 2, 4)
表19查询分析结果 
| 类型 | 查询语句                                         | 返回结果        |
|:---|:---|:---|
| 场景 | MV_SLICE(ARRAY\['1','2','3','4','5'\], 2, 4) | \["3","4"\] |
   
 #### mv_to_string函数
使用指定的分隔符str连接arr所有元素。
语法：mv_to_string(arr, str)
表20参数说明 
| 参数名称 | 描述    | 类型                   | 是否必选 |
|:---|:---|:---|:---|
| arr  | 原始数组  | Array（String/Number） | 是    |
| str  | 指定分隔符 | String               | 是    |
   
返回值类型：String类型
示例：SELECT MV_TO_STRING(ARRAY\['1','2','3','4','5'\],'-')
表21查询分析结果 
| 类型 | 查询语句                                           | 返回结果      |
|:---|:---|:---|
| 场景 | MV_TO_STRING(ARRAY\['1','2','3','4','5'\],'-') | 1-2-3-4-5 |
   
 #### string_to_mv函数
使用指定的分隔符str2将str1拆分为数组。
语法：string_to_mv(str1, str2)
表22参数说明 
| 参数名称 | 描述    | 类型     | 是否必选 |
|:---|:---|:---|:---|
| str1 | 原始字符串 | String | 是    |
| str2 | 指定分隔符 | String | 是    |
   
返回值类型：Array类型
示例：SELECT STRING_TO_MV('1-2-3-4-5','-')
表23查询分析结果 
| 类型 | 查询语句                          | 返回结果                    |
|:---|:---|:---|
| 场景 | STRING_TO_MV('1-2-3-4-5','-') | \["1","2","3","4","5"\] |
   
 #### mv_offset函数
返回所提供的基于0的索引处的数组元素，或对于超出范围的索引返回null。
语法：mv_offset(arr, index)
表24参数说明 
| 参数名称  | 描述     | 类型                   | 是否必选 |
|:---|:---|:---|:---|
| arr   | 原始数组   | Array（String/Number） | 是    |
| index | 指定索引位置 | Integer              | 是    |
   
返回值类型：String/Integer/Long/Boolean/Double类型
示例：SELECT MV_OFFSET(ARRAY\['1','2','3','4','5'\], 2)
表25查询分析结果 
| 类型 | 查询语句                                       | 返回结果 |
|:---|:---|:---|
| 场景 | MV_OFFSET(ARRAY\['1','2','3','4','5'\], 2) | 3    |
   
 #### mv_ordinal函数
返回所提供的基于1的索引处的数组元素，或对于超出范围的索引返回null。
语法：mv_ordinal(arr, index)
表26参数说明 
| 参数名称  | 描述     | 类型                   | 是否必选 |
|:---|:---|:---|:---|
| arr   | 原始数组   | Array（String/Number） | 是    |
| index | 指定索引位置 | Integer              | 是    |
   
返回值类型：String/Integer/Long/Boolean/Double类型
示例：SELECT MV_ORDINAL(ARRAY\['1','2','3','4','5'\], 2)
表27查询分析结果 
| 类型 | 查询语句                                         | 返回结果 |
|:---|:---|:---|
| 场景 | MV_ORDINAL (ARRAY\['1','2','3','4','5'\], 2) | 2    |
   
 #### mv_offset_of函数
返回数组中第一次出现expr的基于0的索引，如果未出现，则返回-1。
语法：mv_offset_of(arr, expr)
表28参数说明 
| 参数名称 | 描述   | 类型                          | 是否必选 |
|:---|:---|:---|:---|
| arr  | 原始数组 | Array（String/Number）        | 是    |
| expr | 指定元素 | String/Number，必须与数组中元素类型相同。 | 是    |
   
返回值类型：Integer类型
示例：SELECT MV_OFFSET_OF(ARRAY\['1','2','3','4','5'\], '2')
表29查询分析结果 
| 类型 | 查询语句                                            | 返回结果 |
|:---|:---|:---|
| 场景 | MV_OFFSET_OF(ARRAY\['1','2','3','4','5'\], '2') | 1    |
   
 #### mv_ordinal_of函数
返回数组中第一次出现expr的基于1的索引，如果未出现，则返回-1。
语法：mv_ordinal_of(arr, expr)
表30参数说明 
| 参数名称 | 描述   | 类型                          | 是否必选 |
|:---|:---|:---|:---|
| arr  | 原始数组 | Array（String/Number）        | 是    |
| expr | 指定元素 | String/Number，必须与数组中元素类型相同。 | 是    |
   
返回值类型：Integer类型
示例：SELECT MV_ORDINAL_OF(ARRAY\['1','2','3','4','5'\], '2')
表31查询分析结果 
| 类型 | 查询语句                                             | 返回结果 |
|:---|:---|:---|
| 场景 | MV_ORDINAL_OF(ARRAY\['1','2','3','4','5'\], '2') | 2    |
   
