
# 数组函数
#### array_append(anyarray, anyelement)
描述：向数组末尾添加元素，只支持一维数组。
返回类型：anyarray
示例：
```
SELECT array_append(ARRAY[1,2], 3) AS RESULT;
 result  
---------
 {1,2,3}
(1 row)
```
#### array_prepend(anyelement, anyarray)
描述：向数组开头添加元素，只支持一维数组。
返回类型：anyarray
示例：
```
SELECT array_prepend(1, ARRAY[2,3]) AS RESULT;
 result  
---------
 {1,2,3}
(1 row)
```
#### array_cat(anyarray, anyarray)
描述：连接两个数组，支持多维数组。
返回类型：anyarray
示例：
```
SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]) AS RESULT;
   result    
-------------
 {1,2,3,4,5}
(1 row)
SELECT array_cat(ARRAY[[1,2],[4,5]], ARRAY[6,7]) AS RESULT;
       result        
---------------------
 {{1,2},{4,5},{6,7}}
(1 row)
```
#### array_ndims(anyarray)
描述：返回数组的维数。
返回类型：int
示例：
```
SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT;
 result 
--------
      2
(1 row)
```
#### array_dims(anyarray)
描述：返回数组维数的文本表示。
返回类型：text
示例：
```
SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT;
   result   
------------
 [1:2][1:3]
(1 row)
```
#### array_length(anyarray, int)
描述：返回数组维度的长度。
返回类型：int
示例：
```
SELECT array_length(array[1,2,3], 1) AS RESULT;
 result 
--------
      3
(1 row)
```
#### array_lower(anyarray, int)
描述：返回数组维数的下界。
返回类型：int
示例：
```
SELECT array_lower('[0:2]={1,2,3}'::int[], 1) AS RESULT;
 result 
--------
      0
(1 row)
```
#### array_upper(anyarray, int)
描述：返回数组维数的上界。
返回类型：int
示例：
```
SELECT array_upper(ARRAY[1,8,3,7], 1) AS RESULT;
 result 
--------
      4
(1 row)
```
#### array_to_string(anyarray, text \[, text\])
描述：使用第一个text作为数组的新分隔符，使用第二个text替换数组值为null的值。
返回类型：text
示例：
```
SELECT array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') AS RESULT;
  result   
-----------
 1,2,3,*,5
(1 row)
```
![](https://support.huaweicloud.com/sqlref-aura-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
在string_to_array中，如果省略null字符串参数或为NULL，将字符串中没有输入内容的子串替换为NULL。
在array_to_string中，如果省略null字符串参数或为NULL，运算中将跳过在数组中的任何null元素，并且不会在输出字符串中出现。
#### string_to_array(text, text \[, text\])
描述：使用第二个text指定分隔符，使用第三个可选的text作为NULL值替换模板，如果分隔后的子串与第三个可选的text完全匹配，则将其替换为NULL。
返回类型：text\[\]
示例：
```
SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy') AS RESULT;
    result    
--------------
 {xx,NULL,zz}
(1 row)
SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'y') AS RESULT;
   result   
------------
 {xx,yy,zz}
(1 row)
```
![](https://support.huaweicloud.com/sqlref-aura-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
在string_to_array中，如果分隔符参数是NULL，输入字符串中的每个字符将在结果数组中变成一个独立的元素。如果分隔符是一个空白字符串，则整个输入的字符串将变为一个元素的数组。否则输入字符串将在每个分隔字符串处分开。
#### unnest(anyarray)
描述：扩大一个数组为一组行。
返回类型：setof anyelement
示例：
```
SELECT unnest(ARRAY[1,2]) AS RESULT;
 result 
--------
      1
      2
(2 rows)
```
unnest函数配合string_to_array数组使用。数组转列，先将字符串按逗号分割成数组，然后再把数组转成列：
```
SELECT unnest(string_to_array('a,b,c,d',',')) AS RESULT;
 result
--------
 a
 b
 c
 d
(4 rows)
```
#### interval(N, N1, N2, N3 ... )
描述：从输入的整数数组中，查找返回最后一个小于等于目标参数n的数组索引。如果n为NULL，返回-1。interval函数不支持interval(N, N1)的场景。
返回类型：int
示例：
```
SELECT INTERVAL(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11) AS RESULT;
 result    
--------
     11
(1 row)
```
#### split(string, delim)
描述：将字符串string按分隔符delimiter进行分隔，并返回数组。
返回类型：text\[\]
示例：
```
SELECT SPLIT('a-b-c-d-e', '-') AS RESULT;
   result    
-------------
 {a,b,c,d,e}
(1 row)
SELECT SPLIT('a-b-c-d-e', '-')[4] AS RESULT;
 result   
--------
 d
(1 row)
```
