【问题标题】:PostgreSQL : Cast Data Type from Text to Bigint when using WHERE INPostgreSQL:使用 WHERE IN 时将数据类型从 Text 转换为 Bigint
【发布时间】:2018-04-03 13:00:02
【问题描述】:

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

运算符不存在: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');

我们如何转换变量?谢谢!

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    对 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 包装到函数中看起来像是损坏的设计。程序不应取代视图。

    【讨论】:

    • 谢谢,这个方法科学多了。之前对SQL的简单使用感到抱歉,我只是想让它看起来简单,专注于手头的问题。尽管 SQL 很长。真的!谢谢,你再次帮助解决了我的问题@Pavel Stehule :)
    • @UgyAstro 使用视图代替这种功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2012-06-05
    相关资源
    最近更新 更多