SQL中BETWEEN表达式的元数(Arity)到底是多少?
BETWEEN 运算符的元数争议与语法解读
问题背景
我一直觉得SQL里的BETWEEN是三元运算符(元数为3),毕竟常见写法都是这样的:
WHERE... 1 BETWEEN 2 AND 3
但BigQuery的官方文档却把它列为二元运算符,这让我有点困惑。
验证示例
我写了段SQL来验证自己的逻辑:
select ~ (SELECT -1 AS expr_1) AS 'bitwise_arity_1', (SELECT 1 AS expr_1) * (SELECT 2 AS expr_2) AS 'times_arity_2', (SELECT 1 AS expr_1) BETWEEN (SELECT 2 AS expr_2) AND (SELECT 3 AS expr_3) AS 'bitwise_arity_3?'
语法解读疑问
我琢磨出一种语法解读:表达式结构是expr 'BETWEEN' logicalAndExpr,其中logicalAndExpr包含两个分组表达式,想问问这种解读对不对?
解答
从SQL语法规范和BigQuery的实现逻辑来看,你的解读完全合理:
- 语法层面,
BETWEEN确实只处理两个操作单元:左边是单个表达式,右边是由AND连接的两个表达式组成的复合逻辑块(也就是你说的logicalAndExpr)。 - BigQuery把它归为二元运算符,本质是把
b AND c当成一个整体操作数,而非拆成三个独立的操作数。 - 虽然语义上
a BETWEEN b AND c等价于a >= b AND a <= c,但语法上BETWEEN是将a和(b AND c)作为两个部分来处理,这就是它被定义为二元运算符的核心原因。
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

