Поиск по целочисленному массиву в Postgres - PullRequest
14 голосов
/ 23 ноября 2011

Есть ли другой способ поиска определенного значения в столбце integer[] в Postgres?

Моя установленная в настоящее время версия Postgres не допускает следующее утверждение:

SELECT * FROM table WHERE values *= 10;

Примеры массивов:

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

Оператор должен возвращать каждую строку, где массив содержит '10710'.

Ответы [ 3 ]

30 голосов
/ 23 ноября 2011

Для проверки на равенство вы можете просто:

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

Прочитать о ЛЮБОЕ / НЕКОТОРЫЕ в руководстве .

1 голос
/ 24 декабря 2014

быстрый поиск будет таким, но вы должны использовать индекс gist или gin для типа intarray Postgres intarray

 SELECT * FROM table WHERE values @> ARRAY[10];
0 голосов
/ 15 июня 2016
**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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...