SQL 表达式 (SQL expression)

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime

表达式是一个公式,它使用函数或运算符根据文本或者对列、字段或变量的引用来计算结果。

语法

{ literal |
  named_parameter_marker |
  unnamed_parameter_marker |
  column_reference |
  field_reference |
  parameter_reference |
  CAST expression |
  CASE expression |
  expr operator expr |
  operator expr |
  expr [ expr ] |
  function_invocation |
  ( expr ) |
  ( expr, expr [, ... ] ) |
  scalar_subquery }

scalar_subquery
  ( query )

expr [ expr ] 中的括号是真实括号,不指示可选语法。

parameters

  • literal

    数据类型中介绍了类型的文本。

  • named_parameter_marker

    提交 SQL 语句的 API 提供的值的命名和类型化占位符。

  • unnamed_parameter_marker

    提交 SQL 语句的 API 提供的值的未命名和类型化占位符。

  • column_reference

    对表中的列或列别名的引用。

  • field_reference

    STRUCT 类型中的字段的引用。

  • parameter_reference

    使用函数正文对 SQL 用户定义函数的参数的引用。 引用可以使用参数的非限定名称,或者可以使用函数名称来限定名称。 解析标识符时,参数将构成最外层范围。

  • CAST 表达式

    将参数强制转换为不同类型的表达式。

  • CASE 表达式

    允许条件求值的表达式。

  • expr

    operator 结合的表达式自身,或充当函数参数的表达式。

  • 运算符

    一元运算符或二进制运算符。

  • expr [ expr ]

    对数组元素或映射键的引用。

  • function_invocation

    对内置函数或用户定义函数的调用。

    有关详细信息,请参阅 function_invocation

  • ( expr )

    重写运算符优先级的强制优先级。

  • ( expr, expr [, … ] )

    创建两个或多个字段的 struct。 此表示法与 struct 函数同义。

  • scalar_subquery

    • ( query )

      基于查询的表达式,该查询必须返回单列且最多返回一行。

每个函数和运算符的页面介绍了其参数所需的数据类型。 Azure Databricks 使用 SQL 数据类型规则执行隐式强制转换为所需类型的操作。 如果运算符或函数对于提供的参数无效,Azure Databricks 会引发错误。

有关名称解析的详细信息,请参阅列、字段、参数和变量解析

常数表达式

仅基于不带参数的文本或确定性函数的表达式。 Azure Databricks 可以执行表达式并在通常需要文本的位置使用结果常量。

布尔表达式 (Boolean expression)

结果类型为 BOOLEAN 的表达式。 布尔表达式有时也称为“条件”或“谓词”。

标量子查询

( query ) 形式的表达式。 查询必须返回一个包含一列且最多一行的表。

如果查询未返回任何行,则结果为 NULL。 如果查询返回多行,Azure Databricks 将返回错误。 否则,结果即为查询返回的值。

简单表达式

不包含 query 的表达式,例如标量子查询或 EXISTS 谓词。

示例

> SELECT 1;
  1

> SELECT (SELECT 1) + 1;
  2

> SELECT 1 + 1;
  2

> SELECT 2 * (1 + 2);
  6

> SELECT 2 * 1 + 2;
  4

> SELECT substr('Spark', 1, 2);
  Sp

> SELECT c1 + c2 FROM VALUES(1, 2) AS t(c1, c2);
  3

> SELECT a[1] FROM VALUES(array(10, 20)) AS T(a);
  20

> SELECT true;
  true

> SELECT (c1, (c2, c3)) FROM VALUES(1, 2, 3) AS T(c1, c2, c3);
  {"c1":1,"col2":{"c2":2,"c3":3}}