Skip to main content

Use named parameter markers

Named parameter markers let you insert variable values into SQL queries at runtime. Instead of hard-coding specific values, you define typed placeholders that users fill in when the query runs. This improves query reuse, prevents SQL injection, and makes it easier to build flexible, interactive queries.

Named parameter markers work in the following Databricks surfaces:

  • SQL editor (new and legacy)
  • Notebooks
  • AI/BI dashboard dataset editor
  • Genie spaces

Add a named parameter marker

Insert a parameter by typing a colon followed by a parameter name, such as :parameter_name. When you add a named parameter marker to a query, a widget appears where you can set the parameter type and value. See Work with parameter widgets.

This example converts a hard-coded query to use a named parameter.

Starting query:

SQL
SELECT
trip_distance,
fare_amount
FROM
samples.nyctaxi.trips
WHERE
fare_amount < 5
  1. Delete 5 from the WHERE clause.
  2. Type :fare_parameter in its place. The last line should read fare_amount < :fare_parameter.
  3. Click the gear icon near the parameter widget.
  4. Set the Type to Decimal.
  5. Enter a value in the parameter widget and click Apply changes.
  6. Click Save.

Parameter types

Set the parameter type in the parameter settings panel. The type determines how Databricks interprets and handles the value at runtime.

Type

Description

String

Free-form text. Backslash, single, and double quotation marks are escaped automatically. Databricks adds quotation marks around the value.

Integer

Whole number value.

Decimal

Numeric value that supports fractional values.

Date

Date value. Uses a calendar picker and defaults to the current date.

Timestamp

Date and time value. Uses a calendar picker and defaults to the current date and time.

Named parameter syntax examples

The following examples show common patterns for named parameter markers.

Insert a date

SQL
SELECT
o_orderdate AS Date,
o_orderpriority AS Priority,
sum(o_totalprice) AS `Total Price`
FROM
samples.tpch.orders
WHERE
o_orderdate > :date_param
GROUP BY 1, 2

Insert a number

SQL
SELECT
o_orderdate AS Date,
o_orderpriority AS Priority,
o_totalprice AS Price
FROM
samples.tpch.orders
WHERE
o_totalprice > :num_param

Insert a field name

Use the IDENTIFIER function to pass a column name as a parameter. The parameter value should be a column name from the table used in the query.

SQL
SELECT * FROM samples.tpch.orders
WHERE IDENTIFIER(:field_param) < 10000

Insert database objects

Use the IDENTIFIER function with multiple parameters to specify a catalog, schema, and table at runtime.

SQL
SELECT *
FROM IDENTIFIER(:catalog || '.' || :schema || '.' || :table)

See IDENTIFIER clause.

Concatenate multiple parameters

Use format_string to combine parameters into a single formatted string. See format_string function.

SQL
SELECT o_orderkey, o_clerk
FROM samples.tpch.orders
WHERE o_clerk LIKE format_string('%s%s', :title, :emp_number)

Work with JSON strings

Use the from_json function to extract a value from a JSON string using a parameter as the key. Substituting a as the value for :param returns 1.

SQL
SELECT from_json('{"a": 1}', 'map<string, int>') [:param]

Create an interval

Use CAST to convert a parameter value to an INTERVAL type for time-based calculations. See Interval type.

SQL
SELECT CAST(:param AS INTERVAL MINUTE)

Add a date range using .min and .max

Date and Timestamp parameters support a range widget. Use .min and .max to access the start and end of the range.

SQL
SELECT * FROM samples.nyctaxi.trips
WHERE tpep_pickup_datetime
BETWEEN :date_range.min AND :date_range.max

Set the parameter type to Date or Timestamp and the widget type to Range.

Add a date range using two parameters

SQL
SELECT * FROM samples.nyctaxi.trips
WHERE tpep_pickup_datetime
BETWEEN CAST(:date_range_min AS TIMESTAMP) AND CAST(:date_range_max AS TIMESTAMP)

Parameterize rollup granularity

Use DATE_TRUNC to aggregate results at a user-selected level of granularity. Pass DAY, MONTH, or YEAR as the parameter value.

SQL
SELECT
DATE_TRUNC(:date_granularity, tpep_pickup_datetime) AS date_rollup,
COUNT(*) AS total_trips
FROM samples.nyctaxi.trips
GROUP BY date_rollup

Pass multiple values as a string

Use ARRAY_CONTAINS, SPLIT, and TRANSFORM to filter on a comma-separated list of values passed as a single string parameter. SPLIT parses the comma-separated string into an array. TRANSFORM trims whitespace from each element. ARRAY_CONTAINS checks whether the table value appears in the resulting array.

SQL
SELECT * FROM samples.nyctaxi.trips WHERE
array_contains(
TRANSFORM(SPLIT(:list_parameter, ','), s -> TRIM(s)),
CAST(dropoff_zip AS STRING)
)
note

This example works for string values. To use other data types, wrap the TRANSFORM operation with a CAST to convert the elements to the desired type.

Syntax migration reference

Use this table when converting queries from mustache syntax to named parameter markers. See Mustache parameter syntax for more information about the legacy syntax.

Use case

Mustache syntax

Named parameter syntax

Filter by date

WHERE date_field < '{{date_param}}'

WHERE date_field < :date_param

Filter by number

WHERE price < {{max_price}}

WHERE price < :max_price

Compare strings

WHERE region = '{{region_param}}'

WHERE region = :region_param

Specify a table

SELECT * FROM {{table_name}}

SELECT * FROM IDENTIFIER(:table) — use the full three-level namespace

Specify catalog, schema, and table

SELECT * FROM {{catalog}}.{{schema}}.{{table}}

SELECT * FROM IDENTIFIER(:catalog || '.' || :schema || '.' || :table)

Format a string from multiple parameters

"({{area_code}}) {{phone_number}}"

format_string("(%d) %d", :area_code, :phone_number)

Create an interval

SELECT INTERVAL {{p}} MINUTE

SELECT CAST(format_string("INTERVAL '%s' MINUTE", :param) AS INTERVAL MINUTE)