如何在PostgreSQL中将整数列表存储为变量

slhcrj9b  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(3)|浏览(216)

我只是想知道如何在PostreSQL存储过程中将整数列表存储为变量。
例如,我有这样的陈述:

select A from B where C IN (1,2,3);
   select A from B where C IN (1,2);

我想声明一个变量来存储(1,2,3)(1,2)
所以我会用这样一句话来结尾:

select A from B where C in numberList;

(数字列表的值为(1,2,3))
我不知道我应该使用哪种数据类型,我上网查了一下,没有发现psql中有列表类型。它的语法是什么?

zujrkrfu

zujrkrfu1#

您可以将它们存储为整型数组(即int[])类型,然后使用ANY运算符进行调用,如下所示:

WITH RECURSIVE CTE AS (
    SELECT 1 AS i
        UNION ALL
    SELECT i+1 FROM CTE WHERE i < 15
)
SELECT * FROM CTE WHERE i = ANY( ARRAY[1, 5, 7, 9] )

它返回了我们要寻找的分段动态IN运算符结果:

i
-
1
5
7
9
wnrlj8wa

wnrlj8wa2#

with myconstants (i) as (values(1),(2),(3))
select A from B, myconstants where C=any(i);

further reading

bvjxkvbb

bvjxkvbb3#

使用这个解决方案,你可以在多个查询中使用"变量"。注意,它实际上是一个函数,但是你可以把它当作变量使用。
还要考虑到每次使用它时,函数都会被执行,因此这可能不是最有效的方法,但对于简单的使用来说,它有助于避免在不同的查询中多次键入或粘贴同一个列表。

CREATE FUNCTION get_constant_array()
RETURNS INTEGER[]
AS $$
BEGIN
    RETURN ARRAY[1,2,3,4];
END;
$$ LANGUAGE plpgsql;

然后,您可以使用它,例如,像这样:

SELECT get_constant_array();

或者像这样:

SELECT * from sometable where some column in (SELECT get_constant_array)
    • PS:**这个解决方案是基于PostgreSQL的,尽管我认为它可能在其他方言中也能工作,也许只需要稍加修改。
    • PPS:**使用类似的方法,您还可以存储字符串列表,如果您需要我编辑我的答案以使用字符串,请告诉我。

相关问题