在Postgres中搜索整数数组

时间:2011-11-23 13:03:38

标签: sql arrays postgresql

在Postgres的integer[]列中是否有其他方法可以搜索特定值?

我当前安装的Postgres版本允许以下声明:

SELECT * FROM table WHERE values *= 10;

数组示例:

'{11043,10859,10860,10710,10860,10877,10895,11251}'
'{11311,10698,10697,10710,10712,10711,10708}'

该语句应该返回数组包含'10710'的每一行。

3 个答案:

答案 0 :(得分:30)

对于平等检查,您可以简单地:

SELECT * FROM table WHERE 10 = ANY (values);

了解ANY/SOME in the manual

答案 1 :(得分:1)

快速搜索会如此,但你应该使用index gist或gin for intarray type Postgres intarray

 SELECT * FROM table WHERE values @> ARRAY[10];

答案 2 :(得分:-1)

**Store Integer Array as Strings in Postgresql and Query the Array**    
Finally I could save the integer as string array in one column able to successfully convert into array and query the array using below example.

    CREATE TABLE test
    (
      year character varying,
      id serial NOT NULL,
      category_id character varying,
      CONSTRAINT test_pkey PRIMARY KEY (id)
    )

    Data
    "2005";1;"1,2,3,4"
    "2006";2;"2,3,5,6"
    "2006";3;"4,3,5,6"
    "2007";7;"1,2"


    select distinct(id) from test, (select id as cid, unnest(string_to_array(category_id ,  ',')::integer[]) as cat from test) c where c.cid=test.id and cat in (1,2,3);

    Result:
    2
    1
    3
    7