Search Shortcut cmd + k | ctrl + k
		
	- Installation
 - Documentation
 - Getting Started
 - Connect
 - Data Import and Export
 - Overview
 - Data Sources
 - CSV Files
 - JSON Files
 - Overview
 - Creating JSON
 - Loading JSON
 - Writing JSON
 - JSON Type
 - JSON Functions
 - Format Settings
 - Installing and Loading
 - SQL to / from JSON
 - Caveats
 - Multiple Files
 - Parquet Files
 - Partitioning
 - Appender
 - INSERT Statements
 - Lakehouse Formats
 - Client APIs
 - Overview
 - Tertiary Clients
 - ADBC
 - C
 - Overview
 - Startup
 - Configuration
 - Query
 - Data Chunks
 - Vectors
 - Values
 - Types
 - Prepared Statements
 - Appender
 - Table Functions
 - Replacement Scans
 - API Reference
 - C++
 - CLI
 - Overview
 - Arguments
 - Dot Commands
 - Output Formats
 - Editing
 - Safe Mode
 - Autocomplete
 - Syntax Highlighting
 - Known Issues
 - Dart
 - Go
 - Java (JDBC)
 - Julia
 - Node.js (Deprecated)
 - Node.js (Neo)
 - ODBC
 - PHP
 - Python
 - Overview
 - Data Ingestion
 - Conversion between DuckDB and Python
 - DB API
 - Relational API
 - Function API
 - Types API
 - Expression API
 - Spark API
 - API Reference
 - Known Python Issues
 - R
 - Rust
 - Swift
 - Wasm
 - SQL
 - Introduction
 - Statements
 - Overview
 - ANALYZE
 - ALTER DATABASE
 - ALTER TABLE
 - ALTER VIEW
 - ATTACH and DETACH
 - CALL
 - CHECKPOINT
 - COMMENT ON
 - COPY
 - CREATE INDEX
 - CREATE MACRO
 - CREATE SCHEMA
 - CREATE SECRET
 - CREATE SEQUENCE
 - CREATE TABLE
 - CREATE VIEW
 - CREATE TYPE
 - DELETE
 - DESCRIBE
 - DROP
 - EXPORT and IMPORT DATABASE
 - INSERT
 - LOAD / INSTALL
 - MERGE INTO
 - PIVOT
 - Profiling
 - SELECT
 - SET / RESET
 - SET VARIABLE
 - SHOW and SHOW DATABASES
 - SUMMARIZE
 - Transaction Management
 - UNPIVOT
 - UPDATE
 - USE
 - VACUUM
 - Query Syntax
 - SELECT
 - FROM and JOIN
 - WHERE
 - GROUP BY
 - GROUPING SETS
 - HAVING
 - ORDER BY
 - LIMIT and OFFSET
 - SAMPLE
 - Unnesting
 - WITH
 - WINDOW
 - QUALIFY
 - VALUES
 - FILTER
 - Set Operations
 - Prepared Statements
 - Data Types
 - Overview
 - Array
 - Bitstring
 - Blob
 - Boolean
 - Date
 - Enum
 - Interval
 - List
 - Literal Types
 - Map
 - NULL Values
 - Numeric
 - Struct
 - Text
 - Time
 - Timestamp
 - Time Zones
 - Union
 - Typecasting
 - Expressions
 - Overview
 - CASE Expression
 - Casting
 - Collations
 - Comparisons
 - IN Operator
 - Logical Operators
 - Star Expression
 - Subqueries
 - TRY
 - Functions
 - Overview
 - Aggregate Functions
 - Array Functions
 - Bitstring Functions
 - Blob Functions
 - Date Format Functions
 - Date Functions
 - Date Part Functions
 - Enum Functions
 - Interval Functions
 - Lambda Functions
 - List Functions
 - Map Functions
 - Nested Functions
 - Numeric Functions
 - Pattern Matching
 - Regular Expressions
 - Struct Functions
 - Text Functions
 - Time Functions
 - Timestamp Functions
 - Timestamp with Time Zone Functions
 - Union Functions
 - Utility Functions
 - Window Functions
 - Constraints
 - Indexes
 - Meta Queries
 - DuckDB's SQL Dialect
 - Overview
 - Indexing
 - Friendly SQL
 - Keywords and Identifiers
 - Order Preservation
 - PostgreSQL Compatibility
 - SQL Quirks
 - Samples
 - Configuration
 - Extensions
 - Overview
 - Installing Extensions
 - Advanced Installation Methods
 - Distributing Extensions
 - Versioning of Extensions
 - Troubleshooting of Extensions
 - Core Extensions
 - Overview
 - AutoComplete
 - Avro
 - AWS
 - Azure
 - Delta
 - DuckLake
 - Encodings
 - Excel
 - Full Text Search
 - httpfs (HTTP and S3)
 - Iceberg
 - Overview
 - Iceberg REST Catalogs
 - Amazon S3 Tables
 - Amazon SageMaker Lakehouse (AWS Glue)
 - Troubleshooting
 - ICU
 - inet
 - jemalloc
 - MySQL
 - PostgreSQL
 - Spatial
 - SQLite
 - TPC-DS
 - TPC-H
 - UI
 - VSS
 - Guides
 - Overview
 - Data Viewers
 - Database Integration
 - File Formats
 - Overview
 - CSV Import
 - CSV Export
 - Directly Reading Files
 - Excel Import
 - Excel Export
 - JSON Import
 - JSON Export
 - Parquet Import
 - Parquet Export
 - Querying Parquet Files
 - File Access with the file: Protocol
 - Network and Cloud Storage
 - Overview
 - HTTP Parquet Import
 - S3 Parquet Import
 - S3 Parquet Export
 - S3 Iceberg Import
 - S3 Express One
 - GCS Import
 - Cloudflare R2 Import
 - DuckDB over HTTPS / S3
 - Fastly Object Storage Import
 - Meta Queries
 - Describe Table
 - EXPLAIN: Inspect Query Plans
 - EXPLAIN ANALYZE: Profile Queries
 - List Tables
 - Summarize
 - DuckDB Environment
 - ODBC
 - Performance
 - Overview
 - Environment
 - Import
 - Schema
 - Indexing
 - Join Operations
 - File Formats
 - How to Tune Workloads
 - My Workload Is Slow
 - Benchmarks
 - Working with Huge Databases
 - Python
 - Installation
 - Executing SQL
 - Jupyter Notebooks
 - marimo Notebooks
 - SQL on Pandas
 - Import from Pandas
 - Export to Pandas
 - Import from Numpy
 - Export to Numpy
 - SQL on Arrow
 - Import from Arrow
 - Export to Arrow
 - Relational API on Pandas
 - Multiple Python Threads
 - Integration with Ibis
 - Integration with Polars
 - Using fsspec Filesystems
 - SQL Editors
 - SQL Features
 - Snippets
 - Creating Synthetic Data
 - Dutch Railway Datasets
 - Sharing Macros
 - Analyzing a Git Repository
 - Importing Duckbox Tables
 - Copying an In-Memory Database to a File
 - Troubleshooting
 - Glossary of Terms
 - Browsing Offline
 - Operations Manual
 - Overview
 - DuckDB's Footprint
 - Installing DuckDB
 - Logging
 - Securing DuckDB
 - Non-Deterministic Behavior
 - Limits
 - DuckDB Docker Container
 - Development
 - DuckDB Repositories
 - Release Cycle
 - Profiling
 - Building DuckDB
 - Overview
 - Build Configuration
 - Building Extensions
 - Android
 - Linux
 - macOS
 - Raspberry Pi
 - Windows
 - Python
 - R
 - Troubleshooting
 - Unofficial and Unsupported Platforms
 - Benchmark Suite
 - Testing
 - Internals
 - Sitemap
 - Live Demo
 
  
  
  Documentation
  
    
    
  
    
    
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
          / SQL
          
          
          
            
              
              
            
              
              
                / Statements
                
                
                
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                    
                    
                  
                
              
            
              
              
            
              
              
            
              
              
            
              
              
            
              
              
            
              
              
            
              
              
            
              
              
            
              
              
            
          
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
    
  
  
SET VARIABLE and RESET VARIABLE Statements
				DuckDB supports the definition of SQL-level variables using the SET VARIABLE and RESET VARIABLE statements.
Variable Scopes
DuckDB supports two levels of variable scopes:
| Scope | Description | 
|---|---|
SESSION | 
      Variables with a SESSION scope are local to you and only affect the current session. | 
    
GLOBAL | 
      Variables with a GLOBAL scope are specific configuration option variables that affect the entire DuckDB instance and all sessions. For example, see Set a Global Variable. | 
    
        
        SET VARIABLE
        
      
    
The SET VARIABLE statement assigns a value to a variable, which can be accessed using the getvariable call:
SET VARIABLE my_var = 30;
SELECT 20 + getvariable('my_var') AS total;
| total | 
|---|
| 50 | 
If SET VARIABLE is invoked on an existing variable, it will overwrite its value:
SET VARIABLE my_var = 30;
SET VARIABLE my_var = 100;
SELECT 20 + getvariable('my_var') AS total;
| total | 
|---|
| 120 | 
Variables can have different types:
SET VARIABLE my_date = DATE '2018-07-13';
SET VARIABLE my_string = 'Hello world';
SET VARIABLE my_map = MAP {'k1': 10, 'k2': 20};
Variables can also be assigned to results of queries:
-- 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 | filename | 
|---|---|
| 42 | test.csv | 
| 84 | test2.csv | 
If a variable is not set, the getvariable function returns NULL:
SELECT getvariable('undefined_var') AS result;
| result | 
|---|
| NULL | 
The getvariable function can also be used in a COLUMNS expression:
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 | 
Syntax
        
        RESET VARIABLE
        
      
    
The RESET VARIABLE statement unsets a variable.
SET VARIABLE my_var = 30;
RESET VARIABLE my_var;
SELECT getvariable('my_var') AS my_var;
| my_var | 
|---|
| NULL | 
Syntax
About this page
© 2025 DuckDB Foundation, Amsterdam NL