簡體   English   中英

在postgres過程中,為什么在使用數組作為參數的任何函數之前需要“=”?

[英]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 BYOVER子句的函數。

ANY之前需要=的原因是ANY也可以適用於其他運營商。 這意味着“在左邊對着數組中的每個元素測試操作符,如果對於至少一個元素測試為真,則返回true。”

您可以使用> ANY (ARRAY[...])或其他任何東西。 它是一個通用運算符,不限於= 特別適用於LIKE ANY (盡管表現有些不好)。

還有ALL ,它做了很多相同的事情,但只有在所有結果都為真時才返回true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM