【问题标题】:ERROR: operator does not exist: integer = integer[]错误:运算符不存在:整数 = 整数 []
【发布时间】:2018-08-03 16:59:13
【问题描述】:

我正在尝试创建一个小函数,该函数将返回数组中的所有客户端,但我不断遇到错误。

DO $$
DECLARE
    c_ids INTEGER[] := array[12879,16759];
BEGIN
  SELECT *
  FROM   client
  WHERE  id IN (c_ids);
END $$;

做这样的事情的正确方法是什么?我需要将 c_ids 作为变量,因为我将在查询的许多地方使用它(示例直接查询不是结束查询)。

【问题讨论】:

  • 不是 postgres 的超级专家,但我相信您需要为数据使用花括号。这篇文章是一个带有循环的示例,但我认为它可能会对您有所帮助stackoverflow.com/questions/9783422/postgres-array-for-loop
  • @JacobH 花括号用于将数组写入字符串,例如'{1,2,3}'ARRAY[1,2,3]。最终结果是一样的。
  • @eurotrash 谢谢你的解释,这是有道理的。

标签: sql arrays postgresql


【解决方案1】:

IN 运算符使用 = 运算符比较值。如果要检查数组中的值,需要使用ANY

DO $$
DECLARE
    c_ids INTEGER[] := array[12879,16759];
BEGIN
  SELECT *
  FROM   client
  WHERE  id = ANY (c_ids);
END $$;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 2020-02-05
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2014-06-30
    相关资源
    最近更新 更多