STRING_TO_ARRAY

拆分包含数组值的字符串并返回原生一维数组。输出不包括“ARRAY”关键字。此函数不支持嵌套(多维)数组。

默认情况下,此函数将数组元素作为字符串返回。您可以转换为其他类型,如下例所示:

=> SELECT STRING_TO_ARRAY('[1,2,3]')::ARRAY[INT];

行为

不可变

语法

STRING_TO_ARRAY(string [USING PARAMETERS param=value[,...]])

以下语法已弃用:

STRING_TO_ARRAY(string, delimiter)

参数

string
一维数组的字符串表示;可以是 VARCHAR 列、字面量字符串或表达式的字符串输出。

除非元素被单独引用,否则字符串中的空格将被移除。例如,' a,b,c' 等价于 'a,b,c'。要保留空间,请使用 '" a","b","c"'

参数

这些参数的行为方式与加载分隔数据时的相应选项相同(请参阅 DELIMITED)。

任何参数不得与任何其他参数具有相同的值。

collection_delimiter
用于分隔数组元素的字符或字符序列 (VARCHAR(8))。您可以使用 E'\000' 到 E'\177'(包含)范围内的任何 ASCII 值。

默认值: 逗号 (',')。

collection_open, collection_close
标记数组开头和末尾的字符 (VARCHAR(8))。在元素列表中的其他地方使用这些字符而不转义它们是错误的。这些字符可以从输入字符串中忽略。

默认值: 方括号('[' 和 ']')。

collection_null_element
表示空元素值的字符串 (VARCHAR(65000))。您可以使用 E'\001' 到 E'\177'(包含)范围内的任何 ASCII 值指定 null 值(除 NULL 之外的任何 ASCII 值:E'\000')。

默认值: 'null'

collection_enclose
可选的引号字符,其中包含单个元素,允许将分隔符嵌入到字符串值中。您可以选择 E'\001' 到 E'\177'(包含)范围内的任何 ASCII 值(除 NULL 之外的任何 ASCII 字符:E'\000')。元素不需要被该值包围。

默认: 双引号('"')

示例

该函数使用逗号作为默认分隔符。您可以指定不同的值:

=> SELECT STRING_TO_ARRAY('[1,3,5]');
 STRING_TO_ARRAY
-----------------
 ["1","3","5"]
(1 row)

=> SELECT STRING_TO_ARRAY('[t|t|f|t]' USING PARAMETERS collection_delimiter = '|');
  STRING_TO_ARRAY
-------------------
 ["t","t","f","t"]
(1 row)

边界括号是可选的:

=> SELECT STRING_TO_ARRAY('t|t|f|t' USING PARAMETERS collection_delimiter = '|');
  STRING_TO_ARRAY
-------------------
 ["t","t","f","t"]
(1 row)

输入可以使用其他字符进行打开和关闭:

=> SELECT STRING_TO_ARRAY('{NASA-1683,NASA-7867,SPX-76}' USING PARAMETERS collection_open = '{', collection_close = '}');
          STRING_TO_ARRAY
------------------------------------
 ["NASA-1683","NASA-7867","SPX-76"]
(1 row)

默认情况下,输入中的字符串 'null' 被视为空值:

=> SELECT STRING_TO_ARRAY('{"us-1672",null,"darpa-1963"}' USING PARAMETERS collection_open = '{', collection_close = '}');
        STRING_TO_ARRAY
-------------------------------
 ["us-1672",null,"darpa-1963"]
(1 row)

在以下示例中,输入来自列:

=> SELECT STRING_TO_ARRAY(name USING PARAMETERS collection_delimiter=' ') FROM employees;
    STRING_TO_ARRAY
-----------------------
 ["Howard","Wolowitz"]
 ["Sheldon","Cooper"]
(2 rows)