[英]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.