Pet*_*uss 5 sql postgresql syntax any semantics
在数学和许多编程语言(我认为标准 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]))
Run Code Online (Sandbox Code Playgroud)
但是 SELECT 1 = ANY array[1,2]是语法错误(!),并且SELECT 1 = ANY (array[1,2])是有效的。为什么?
好的,因为“手册是这么说的”。但是人类记住所有异常的逻辑是什么?
有关于它的指南吗?
我不明白为什么在某些情况下(expression)是一样的expression,但在其他情况下却不是。
PS1:括号也用作值列表分隔符,如expression IN (value [, ...]). 但是数组不是值列表,当(array expression)与array expression.
另外,我以数组为例,但这个问题/问题不仅与数组有关。
“有总结指南吗?” ,嗯...答案是否定的,所以:动手吧!这个答案是一个维基,让我们写。
让,
ROUND)ANY)current_date)使用这些元素的规则的形式是
当Op、Op1、Op2是数学运算符(例如+, -. *),而F () 是数学函数(例如ROUND())时。
对于规则的标量表达式和“纯数组表达式”:
规则运营商ALL,ANY,ROW,SOME,等。
...更多规则?请帮助编辑这里。
ANY是一个类似函数的构造。与(几乎)Postgres 中的任何其他函数一样,它的参数周围需要括号。使语法一致并帮助解析器避免歧义。
您可以将其视为浓缩为单个表达式的ANY()简写。unnest()
人们可能会争论在的集合变体ANY周围添加一组额外的括号。但这是不明确的,因为括号中的值列表被解释为单一ROW类型。