⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
SET VARIABLE 和 RESET VARIABLE 语句

DuckDB 支持使用 SET VARIABLERESET VARIABLE 语句来定义 SQL 级别的变量。

变量作用域

DuckDB 支持两个层级的变量作用域

作用域 描述
SESSION SESSION 作用域的变量对于用户而言是局部的,且仅影响当前会话。
GLOBAL(全局) GLOBAL 作用域的变量是特定的配置选项变量,会影响整个 DuckDB 实例及所有会话。例如,请参阅 设置全局变量

SET VARIABLE

SET VARIABLE 语句将值赋给变量,该变量可通过 getvariable 调用进行访问

SET VARIABLE my_var = 30;
SELECT 20 + getvariable('my_var') AS total;
total
50

如果对现有变量调用 SET VARIABLE,它将覆盖该变量的值

SET VARIABLE my_var = 30;
SET VARIABLE my_var = 100;
SELECT 20 + getvariable('my_var') AS total;
total
120

变量可以具有不同的类型

SET VARIABLE my_date = DATE '2018-07-13';
SET VARIABLE my_string = 'Hello world';
SET VARIABLE my_map = MAP {'k1': 10, 'k2': 20};

变量也可以被赋值为查询的结果

-- write some CSV files
COPY (SELECT 42 AS a) TO 'test1.csv';
COPY (SELECT 84 AS a) TO 'test2.csv';

-- add a list of CSV files to a table
CREATE TABLE csv_files (file VARCHAR);
INSERT INTO csv_files VALUES ('test1.csv'), ('test2.csv');

-- initialize a variable with the list of csv files
SET VARIABLE list_of_files = (SELECT list(file) FROM csv_files);

-- read the CSV files
SELECT * FROM read_csv(getvariable('list_of_files'), filename := True);
a 文件名
42 test.csv
84 test2.csv

如果未设置变量,getvariable 函数将返回 NULL

SELECT getvariable('undefined_var') AS result;
结果
NULL

getvariable 函数也可以用于 COLUMNS 表达式

SET VARIABLE column_to_exclude = 'col1';
CREATE TABLE tbl AS SELECT 12 AS col0, 34 AS col1, 56 AS col2;
SELECT COLUMNS(c -> c != getvariable('column_to_exclude')) FROM tbl;
col0 col2
12 56

语法

RESET VARIABLE

RESET VARIABLE 语句用于取消设置变量。

SET VARIABLE my_var = 30;
RESET VARIABLE my_var;
SELECT getvariable('my_var') AS my_var;
my_var
NULL

语法

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