[英]Why required “=” before ANY function with array as param, in postgres procedure?
我昨天回答了一个postgres问题,并且还遇到了一个postgres线程( 这里 ),他们描述了以下错误:
ERROR: operator does not exist: text = text[]
HINT: No operator matches the given name and argument type(s). You
might need to add explicit type casts.
只要在不使用= ANY
情况下将ARRAY字符串类型提供给ANY
,似乎就会出现错误。 这看起来很奇怪,因为基于语言,逻辑和SQL约定,通常你有(例如IN
):
variable FUNCTION(set)
代替。
variable = FUNCTION(set)
, 除非ofcourse运算符是一个summation / count操作返回一个结果:)
更有意义的是有variable ANY(Set/Array)
而不是variable=ANY(Set/Array)
。 类似的例子是IN
功能。
谁能解释一下这里发生了什么?
IN (...)
基本等同于= ANY (ARRAY[...])
至关重要的是, ANY
不是一个功能 。 它是由SQL标准定义的语法,不再是窗口函数中的GROUP BY
或OVER
子句的函数。
在ANY
之前需要=
的原因是ANY
也可以适用于其他运营商。 这意味着“在左边对着数组中的每个元素测试操作符,如果对于至少一个元素测试为真,则返回true。”
您可以使用> ANY (ARRAY[...])
或其他任何东西。 它是一个通用运算符,不限于=
。 特别适用于LIKE ANY
(尽管表现有些不好)。
还有ALL
,它做了很多相同的事情,但只有在所有结果都为真时才返回true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.