array_slice
SinceVersion 1.2.0
array_slice
description
Syntax
ARRAY<T> array_slice(ARRAY<T> arr, BIGINT off, BIGINT len)
返回一个子数组,包含所有从指定位置开始的指定长度的元素,如果输入参数为NULL,则返回NULL
1. 如果off是正数,则表示从左侧开始的偏移量
2. 如果off是负数,则表示从右侧开始的偏移量
3. 当指定的off不在数组的实际范围内,返回空数组
4. 如果len是负数,则表示长度为0
notice
仅支持向量化引擎中使用
example
1. mysql> set enable_vectorized_engine=true;
3. mysql> select k2, k2[2:2] from array_type_table_nullable;
4. +-----------------+-------------------------+
5. | k2 | array_slice(`k2`, 2, 2) |
6. +-----------------+-------------------------+
7. | [1, 2, 3] | [2, 3] |
8. | [1, NULL, 3] | [NULL, 3] |
9. | [2, 3] | [3] |
10. | NULL | NULL |
11. +-----------------+-------------------------+
13. mysql> select k2, array_slice(k2, 2, 2) from array_type_table_nullable;
14. +-----------------+-------------------------+
15. | k2 | array_slice(`k2`, 2, 2) |
16. +-----------------+-------------------------+
17. | [1, 2, 3] | [2, 3] |
18. | [1, NULL, 3] | [NULL, 3] |
19. | [2, 3] | [3] |
20. | NULL | NULL |
21. +-----------------+-------------------------+
23. mysql> select k2, k2[2:2] from array_type_table_nullable_varchar;
24. +----------------------------+-------------------------+
25. | k2 | array_slice(`k2`, 2, 2) |
26. +----------------------------+-------------------------+
27. | ['hello', 'world', 'c++'] | ['world', 'c++'] |
28. | ['a1', 'equals', 'b1'] | ['equals', 'b1'] |
29. | ['hasnull', NULL, 'value'] | [NULL, 'value'] |
30. | ['hasnull', NULL, 'value'] | [NULL, 'value'] |
31. +----------------------------+-------------------------+
33. mysql> select k2, array_slice(k2, 2, 2) from array_type_table_nullable_varchar;
34. +----------------------------+-------------------------+
35. | k2 | array_slice(`k2`, 2, 2) |
36. +----------------------------+-------------------------+
37. | ['hello', 'world', 'c++'] | ['world', 'c++'] |
38. | ['a1', 'equals', 'b1'] | ['equals', 'b1'] |
39. | ['hasnull', NULL, 'value'] | [NULL, 'value'] |
40. | ['hasnull', NULL, 'value'] | [NULL, 'value'] |
41. +----------------------------+-------------------------+
当指定off为负数:
1. mysql> select k2, k2[-2:1] from array_type_table_nullable;
2. +-----------+--------------------------+
3. | k2 | array_slice(`k2`, -2, 1) |
4. +-----------+--------------------------+
5. | [1, 2, 3] | [2] |
6. | [1, 2, 3] | [2] |
7. | [2, 3] | [2] |
8. | [2, 3] | [2] |
9. +-----------+--------------------------+
11. mysql> select k2, array_slice(k2, -2, 1) from array_type_table_nullable;
12. +-----------+--------------------------+
13. | k2 | array_slice(`k2`, -2, 1) |
14. +-----------+--------------------------+
15. | [1, 2, 3] | [2] |
16. | [1, 2, 3] | [2] |
17. | [2, 3] | [2] |
18. | [2, 3] | [2] |
19. +-----------+--------------------------+
21. mysql> select k2, k2[-2:2] from array_type_table_nullable_varchar;
22. +----------------------------+--------------------------+
23. | k2 | array_slice(`k2`, -2, 2) |
24. +----------------------------+--------------------------+
25. | ['hello', 'world', 'c++'] | ['world', 'c++'] |
26. | ['a1', 'equals', 'b1'] | ['equals', 'b1'] |
27. | ['hasnull', NULL, 'value'] | [NULL, 'value'] |
28. | ['hasnull', NULL, 'value'] | [NULL, 'value'] |
29. +----------------------------+--------------------------+
31. mysql> select k2, array_slice(k2, -2, 2) from array_type_table_nullable_varchar;
32. +----------------------------+--------------------------+
33. | k2 | array_slice(`k2`, -2, 2) |
34. +----------------------------+--------------------------+
35. | ['hello', 'world', 'c++'] | ['world', 'c++'] |
36. | ['a1', 'equals', 'b1'] | ['equals', 'b1'] |
37. | ['hasnull', NULL, 'value'] | [NULL, 'value'] |
38. | ['hasnull', NULL, 'value'] | [NULL, 'value'] |
39. +----------------------------+--------------------------+
1. mysql> select k2, array_slice(k2, 0) from array_type_table;
2. +-----------+-------------------------+
3. | k2 | array_slice(`k2`, 0) |
4. +-----------+-------------------------+
5. | [1, 2, 3] | [] |
6. +-----------+-------------------------+
8. mysql> select k2, array_slice(k2, -5) from array_type_table;
9. +-----------+----------------------+
10. | k2 | array_slice(`k2`, -5) |
11. +-----------+----------------------+
12. | [1, 2, 3] | [] |
13. +-----------+----------------------+
keywords
ARRAY,SLICE,ARRAY_SLICE
