标量表达式 - Cosmos DB 中的查询语言(在 Azure 和 Fabric 中)

SELECT 句支持标量表达式。 标量表达式是可计算为获取单个值的符号和运算符的组合。 标量表达式的示例包括:常量、属性引用、数组元素引用、别名引用或函数调用。 标量表达式可以使用运算符合并为复杂的表达式。

Syntax

<scalar_expression> ::=  
       <constant>
     | input_alias
     | parameter_name  
     | <scalar_expression>.property_name  
     | <scalar_expression>'['"property_name"|array_index']'  
     | unary_operator <scalar_expression>  
     | <scalar_expression> binary_operator <scalar_expression>    
     | <scalar_expression> ? <scalar_expression> : <scalar_expression>  
     | <scalar_function_expression>  
     | <create_object_expression>
     | <create_array_expression>  
     | (<scalar_expression>)
  
<scalar_function_expression> ::=  
        'udf.' Udf_scalar_function([<scalar_expression>][,…n])  
        | builtin_scalar_function([<scalar_expression>][,…n])  
  
<create_object_expression> ::=  
   '{' [{property_name | "property_name"} : <scalar_expression>][,…n] '}'  
  
<create_array_expression> ::=  
   '[' [<scalar_expression>][,…n] ']'

Arguments

Description
<constant> 表示常量值。 有关详细信息 ,请参阅常量 部分。
input_alias 表示由 input_alias 子句中 FROM 引入的值。
保证此值不可 定义 –跳过输入中的未定义 值。
<scalar_expression>.property_name 表示对象的属性的值。 如果属性不存在或属性在值(不是对象)上引用,则表达式的计算结果为 未定义 值。
<scalar_expression>'['"property_name"|array_index']' 表示具有数组索引array_index的名称property_name或数组元素的属性的值。 如果属性/数组索引不存在,或者对不是对象/数组的值引用属性/数组索引,则表达式的计算结果为未定义值。
unary_operator <scalar_expression> 表示应用于单个值的运算符。
<scalar_expression> binary_operator <scalar_expression> 表示应用于两个值的运算符。
<scalar_function_expression> 表示由函数调用的结果定义的值。
udf_scalar_function 用户定义的标量函数的名称。
builtin_scalar_function 内置标量函数的名称。
<create_object_expression> 表示通过使用指定属性及其值创建新对象获取的值。
<create_array_expression> 表示通过使用指定值作为元素创建新数组获取的值
parameter_name 表示指定参数名称的值。 参数名称必须具有单个 @ 作为第一个字符。

例子

标量表达式的最常见示例是数学公式。

SELECT VALUE
  ((2 + 11 % 7) - 2) / 2
[
  2
]

在下一个示例中,标量表达式的结果是布尔值:

SELECT
  ("Redmond" = "WA") AS isCitySameAsState,
  ("WA" = "WA") AS isStateSameAsState
[
  {
    "isCitySameAsState": false,
    "isStateSameAsState": true
  }
]

注解

  • 调用内置或用户定义的标量函数时,必须定义所有参数。 如果未定义任何参数,则不调用函数,结果为 undefined
  • 在创建对象时,将跳过分配未定义值的任何属性,并且不包括在创建的对象中。
  • 在创建数组时,将跳过分配 未定义 值的任何元素值,并且不包括在创建的对象中。 此跳过会导致下一个定义的元素以不跳过索引的方式取代其位置。