⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
列表类型

LIST 列用于编码值列表。列中的字段可以具有不同长度的值,但它们必须具有相同的底层类型。LIST 通常用于存储数字数组,但可以包含任何统一的数据类型,包括其他 LISTSTRUCT

LIST 与 PostgreSQL 的 ARRAY 类型相似。DuckDB 使用 LIST 术语,但为了兼容 PostgreSQL,也提供了一些 array_ 函数

有关嵌套数据类型的比较,请参阅数据类型概述

对于存储固定长度的列表,DuckDB 使用 ARRAY 类型

创建列表

可以使用 list_value(expr, ...) 函数或等效的方括号表示法 [expr, ...] 来创建列表。表达式可以是常量或任意表达式。要从表列创建列表,请使用 list 聚合函数。

整数列表

SELECT [1, 2, 3];

包含 NULL 值的字符串列表

SELECT ['duck', 'goose', NULL, 'heron'];

包含 NULL 值的列表的列表

SELECT [['duck', 'goose', 'heron'], NULL, ['frog', 'toad'], []];

使用 list_value 函数创建列表

SELECT list_value(1, 2, 3);

创建包含 INTEGER 列表列和 VARCHAR 列表列的表

CREATE TABLE list_table (int_list INTEGER[], varchar_list VARCHAR[]);

从列表中检索数据

可以使用方括号和切片表示法,或者通过诸如 list_extract 之类的列表函数来从列表中检索一个或多个值。为了兼容将列表称为数组的系统,提供了多个等效函数作为别名。例如 array_slice 函数。

示例 结果
SELECT ['a', 'b', 'c'][3] 'c'
SELECT ['a', 'b', 'c'][-1] 'c'
SELECT ['a', 'b', 'c'][2 + 1] 'c'
SELECT list_extract(['a', 'b', 'c'], 3) 'c'
SELECT ['a', 'b', 'c'][1:2] ['a', 'b']
SELECT ['a', 'b', 'c'][:2] ['a', 'b']
SELECT ['a', 'b', 'c'][-2:] ['b', 'c']
SELECT list_slice(['a', 'b', 'c'], 2, 3) ['b', 'c']

比较与排序

LIST 类型可以使用所有比较运算符进行比较。这些比较可用于 WHEREHAVING 子句等逻辑表达式中,并返回 BOOLEAN

LIST 的排序是按位置定义的,规则如下,其中 min_len = min(len(l1), len(l2))

  • 相等。 如果对于 [1, min_len] 中的每个 i,都有 l1[i] = l2[i],则 l1l2 相等。
  • 小于。 对于 [1, min_len] 中第一个满足 l1[i] != l2[i] 的索引 i:如果 l1[i] < l2[i],则 l1 小于 l2

NULL 值按照 PostgreSQL 的语义进行比较。较低的嵌套级别用于平局决胜。

以下是一些返回 true 的比较查询。

SELECT [1, 2] < [1, 3] AS result;
SELECT [[1], [2, 4, 5]] < [[2]] AS result;
SELECT [ ] < [1] AS result;

这些查询返回 false

SELECT [ ] < [ ] AS result;
SELECT [1, 2] < [1] AS result;

这些查询返回 NULL

SELECT [1, 2] < [1, NULL, 4] AS result;

函数

请参阅列表函数

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南