在数学和许多编程语言中(我认为标准SQL也),括号改变优先级(首先对要评估的部分进行分组)或增强可读性(对于人眼)。
等效示例:
SELECT array[1,2] @> array[1]
SELECT (array[1,2]) @> array[1]
SELECT array[1,2] @> (array[1])
SELECT ((array[1,2]) @> (array[1]))
But SELECT 1 = ANY array[1,2]
是语法错误 (!),并且SELECT 1 = ANY (array[1,2])
已验证。为什么?
好的,因为“说明书上是这么说的”。但是人类记住所有异常的逻辑是什么?
有相关指南吗?
我不懂为什么(expression)
是相同的expression
在某些情况下,但在其他情况下则不然。
PS1:括号也用作值列表分隔符,如expression IN (value [, ...])
。但数组不是值列表,并且 PostgreSQL 中似乎没有通用规则:(array expression)
不等于array expression
.
另外,我使用数组作为示例,但这个问题/问题不仅仅与数组有关。
“有总结指南吗?”,嗯...答案是no,所以:动手吧!这个答案是维基百科,我们来写吧。
总结指南
Let,
-
F() 是一个常用函数。 (前任。
ROUND
)
-
L() 类似函数的运算符(例如
ANY
)
-
f类似运算符的函数(例如
current_date
)
-
Op操作员
-
Op1, Op2是不同的运算符
- A、B、C 值或表达式
- S 表达式列表,如“(A,B,C)”
使用这些元素的规则的形式为
“纯粹”的数学表达式
When Op, Op1, Op2是数学运算符(例如+
, -
. *
), and F() 是一个数学函数(例如ROUND()
).
规则标量表达式 and "pure数组表达式”:
-
A Op B = (A Op B): 括号是可选的。
-
A Op1 B Op2 C: 需要检查优先级.
-
(A Op1 B) Op2 C:强制执行“首先(AOp1 B)".
-
A Op1 (B Op2 C):强制执行“首先(BOp2 C)".
-
F(A) = (F(A)) = F((A)) = (F((A))): 括号是可选的。
-
S = (S): 外部括号是可选的。
-
f=(f): 括号是可选的。
具有类函数运算符的表达式
运营商规则为ALL
, ANY
, ROW
, SOME
, etc.
-
L(A) = L((A)):参数中的括号是可选的。
-
(L(A)): 语法错误。
...更多规则?请在这里帮忙编辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)