gpt4 book ai didi

arrays - 为什么在 postgres 程序中以数组为参数的任何函数之前需要 "="?

转载 作者:行者123 更新时间:2023-11-29 11:42:41 24 4
gpt4 key购买 nike

我昨天在回答一个 postgres 问题时,也遇到了一个 postgres 线程 ( here ),他们在其中描述了以下错误:

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.

每当将 ARRAY 字符串类型馈送到 ANY 而不使用 = ANY 时,似乎就会出现错误。这看起来很奇怪,因为基于语言、逻辑和 sql 约定,通常你有(例如 IN):

变量 FUNCTION(set)

而不是。

variable = FUNCTION(set)除非当然运算符是一个返回一个结果的求和/计数运算:)

使用 variable ANY(Set/Array) 而不是 variable=ANY(Set/Array) 会更有意义。类似的例子是 IN 函数。

谁能解释一下这是怎么回事?

最佳答案

IN (...) 基本上等同于 = ANY (ARRAY[...])

重要的是,ANY 不是函数。它是由 SQL 标准定义的语法,与 GROUP BY 或窗口函数中的 OVER 子句相比,它只是一个函数。

ANY 之前需要 = 的原因是 ANY 也可以应用于其他运算符。它的意思是“针对右侧数组中的每个元素测试左侧的运算符,如果至少一个元素的测试为真,则返回真。”

您可以使用 > ANY (ARRAY[...]) 或其他任何方式。它是一个不限于 = 的通用运算符。对 LIKE ANY 特别有用(尽管性能有些差)。

还有 ALL,它做很多相同的事情,但仅当所有结果都为真时才返回真。

关于arrays - 为什么在 postgres 程序中以数组为参数的任何函数之前需要 "="?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41739770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com