Azure Cosmos DB for NoSQL 查询中的标量表达式
适用范围: NoSQL
SELECT
子句 支持标量表达式。 标量表达式是符号和运算符的组合,经计算后可获得单个值。 标量表达式的示例包括:常量、属性引用、数组元素引用、别名引用或函数调用。 可以使用运算符将标量表达式组合成复杂表达式。
语法
<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] ']'
参数
说明 | |
---|---|
<constant> |
表示一个常数值。 有关详细信息,请参阅常量部分。 |
input_alias |
表示由 FROM 子句引入,由 input_alias 定义的值。 |
该值不得是“未定义”–输入中的“未定义”值将被跳过。 | |
<scalar_expression>.property_name |
表示对象的属性值。 如果属性不存在,或对非对象的值引用了属性,则表达式的求值结果为“未定义”值。 |
<scalar_expression>'['"property_name"|array_index']' |
表示名为 property_name 的属性的值或数组中索引为 array_index 的数组元素的值。 如果属性/数组索引不存在,或对非对象/数组的值引用了属性/数组索引,则表达式的求值结果为未定义值。 |
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
。 - 创建对象时,将跳过任何已分配未定义值的属性,并且在创建的对象中不包含该属性。
- 创建数组时,将跳过任何已分配“未定义”值的元素值,并且在创建的对象中不包含该值。 此跳过将导致下一个已定义元素取代其位置,即创建的数组不会具有跳过的索引。