类别:

半结构化和结构化数据函数 (数组/对象)

ARRAY_SLICE

返回从输入数组的指定元素子集构造的数组。

语法

ARRAY_SLICE( <array> , <from> , <to> )
Copy

实参

array

源数组,其中元素的子集用于构造结果数组。

from

源数组中的位置。第一个元素的位置是 0。小于 from 位置的元素不包含在生成的数组中。

to

源数组中的位置。等于或大于 to 的位置的元素不包含在结果数组中。

返回

返回值的数据类型是 ARRAY

使用说明

  • 输出包括元素 截取位置,但不包括 参数 to 指定的元素。

  • 如果数组为 NULL,则结果为 NULL。

  • 如果 fromto 之一为 NULL,则结果为 NULL。

  • 如果 fromto 之一为负数,则相对于数组的末尾,而不是数组的开头。例如,“-2”是指数组中倒数第二个位置。

  • 如果 fromto 都超出了数组的上端,或者都超出了数组的下端,则结果是空集。

  • 当您将 结构化 ARRAY 传递给该函数时,该函数会返回相同类型的结构化 ARRAY。

请注意,其中许多规则(例如,将负数解释为数组末尾的索引,以及包括切片截取位置,但不包括 to 索引的规则)类似于编程语言(如 Python)中的数组切片规则。

这些规则中的每一个都在下面的至少一个示例中进行了说明。

示例

这显示了对数组进行切片的简单示例:

select array_slice(array_construct(0,1,2,3,4,5,6), 0, 2);
Copy

输出:

+---------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), 0, 2) |
|---------------------------------------------------|
| [                                                 |
|   0,                                              |
|   1                                               |
| ]                                                 |
+---------------------------------------------------+
Copy

此示例显示了使用 NULL 作为输入数组的效果:

select array_slice(NULL, 2, 3);
Copy

输出:

+-------------------------+
| ARRAY_SLICE(NULL, 2, 3) |
|-------------------------|
| NULL                    |
+-------------------------+
Copy

此示例显示了使用 NULL 作为切片索引之一的效果:

select array_slice(array_construct(0,1,2,3,4,5,6), NULL, 2);
Copy

输出:

+------------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), NULL, 2) |
|------------------------------------------------------|
| NULL                                                 |
+------------------------------------------------------+
Copy

此示例显示了使用负数作为索引的效果;该数字被解释为数组末尾的偏移量:

select array_slice(array_construct(0,1,2,3,4,5,6), 0, -2);
Copy

输出:

+----------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), 0, -2) |
|----------------------------------------------------|
| [                                                  |
|   0,                                               |
|   1,                                               |
|   2,                                               |
|   3,                                               |
|   4                                                |
| ]                                                  |
+----------------------------------------------------+
Copy

两个索引都可以是负数,即两者都可以相对于数组的末尾:

select array_slice(array_construct(0,1,2,3,4,5,6), -5, -3);
Copy

输出:

+-----------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), -5, -3) |
|-----------------------------------------------------|
| [                                                   |
|   2,                                                |
|   3                                                 |
| ]                                                   |
+-----------------------------------------------------+
Copy

在此示例中,两个索引都超出了数组的末尾:

select array_slice(array_construct(0,1,2,3,4,5,6), 10, 12);
Copy

输出:

+-----------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), 10, 12) |
|-----------------------------------------------------|
| []                                                  |
+-----------------------------------------------------+
Copy

在此示例中,两个索引都位于数组的开头之前:

select array_slice(array_construct(0,1,2,3,4,5,6), -10, -12);
Copy

输出:

+-------------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), -10, -12) |
|-------------------------------------------------------|
| []                                                    |
+-------------------------------------------------------+
Copy

尽管索引必须是数字,但数组的元素不需要是数字:

SELECT ARRAY_SLICE(ARRAY_CONSTRUCT('foo','snow','flake','bar'), 1, 3);
Copy

输出:

+----------------------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT('FOO','SNOW','FLAKE','BAR'), 1, 3) |
|----------------------------------------------------------------|
| [                                                              |
|   "snow",                                                      |
|   "flake"                                                      |
| ]                                                              |
+----------------------------------------------------------------+
Copy
语言: 中文