PostgreSQL:使用WHERE IN时,将数据类型从Text转换为Bigint

时间:2018-04-03 03:51:53

标签: postgresql

在过程中在PostgreSQL上使用TEXT时尝试将数据类型从BIGINT转换为WHERE IN时,我遇到了问题。这总是给出

  

运算符不存在:bigint = text。尝试在查询中强制转换变量。

但仍然得到同样的通知。这是示例查询:

    DECLARE

     -- $1 params text

    BEGIN
      SELECT * FROM table_a where 
      colId IN($1); // notice is here, colId is bigint
    END 

    /*Call the procedure*/

    SELECT my_function('1,2,3,4,5');

我们如何投射变量?谢谢!

1 个答案:

答案 0 :(得分:2)

使用字符串作为id列表是错误的设计。您可以在PostgreSQL中使用数组。

例如

CREATE OR REPLACE FUNCTION foo(VARIADIC ids int[])
RETURNS SETOF table_a AS $$
SELECT * FROM table_a WHERE id = ANY($1)
$$ LANGUAGE sql;

SELECT foo(1,2,3);

但是,通常将简单的SQL包装到函数中看起来就像破碎的设计。程序不应取代观点。