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)