Ответ 1
Это должно работать:
select * from mytable where 'Journal'=ANY(pub_types);
то есть. синтаксис <value> = ANY ( <array> )
. Также обратите внимание, что строковые литералы в postresql записываются с одинарными кавычками.
Я уверен, что это дублированный вопрос в том смысле, что ответ там где-то, но я не смог найти ответ после Googling в течение 10 минут, поэтому я бы обратился к редакторам не с закройте его на том основании, что это может быть полезно для других людей.
Я использую Postgres 9.5. Это моя таблица:
Column │ Type │ Modifiers
─────────────────────────┼───────────────────────────┼─────────────────────────────────────────────────────────────────────────
id │ integer │ not null default nextval('mytable_id_seq'::regclass)
pmid │ character varying(200) │
pub_types │ character varying(2000)[] │ not null
Я хочу найти все строки с "Журналом" в pub_types
.
Я нашел документы и googled, и это то, что я пробовал:
select * from mytable where ("Journal") IN pub_types;
select * from mytable where "Journal" IN pub_types;
select * from mytable where pub_types=ANY("Journal");
select * from mytable where pub_types IN ("Journal");
select * from mytable where where pub_types contains "Journal";
Я отсканировал отчет по массиву postgres, но не может видеть простой пример запуска запроса, и все вопросы StackOverflow кажутся основываться на более сложных примерах.
Это должно работать:
select * from mytable where 'Journal'=ANY(pub_types);
то есть. синтаксис <value> = ANY ( <array> )
. Также обратите внимание, что строковые литералы в postresql записываются с одинарными кавычками.
С любым оператором вы можете искать только одно значение.
Например,
select * from mytable where 'Book' = ANY(pub_types);
Если вы хотите найти несколько значений, вы можете использовать оператор @>.
Например,
select * from mytable where pub_types @> '{"Journal", "Book"}';
Вы можете указать, в каком порядке вы когда-либо хотели.
Вместо IN
мы можем использовать ANY
с массивами, приведенными к перечислению массива, например:
create type example_enum as enum (
'ENUM1', 'ENUM2'
);
create table example_table (
id integer,
enum_field example_enum
);
select
*
from
example_table t
where
t.enum_field = any(array['ENUM1', 'ENUM2']::example_enum[]);
Или мы все еще можем использовать предложение IN, но сначала мы должны "удалить его":
select
*
from
example_table t
where
t.enum_field in (select unnest(array['ENUM1', 'ENUM2']::example_enum[]));
Это сработало для меня:
select * from mytable
where array_to_string(pub_types, ',') like '%Journal%'
В зависимости от ваших потребностей в нормализации, может быть лучше реализовать отдельную таблицу со ссылкой на FK, поскольку вы можете получить лучшую производительность и управляемость.
Это сработало для меня
let exampleArray = [1, 2, 3, 4, 5];
let exampleToString = exampleArray.toString(); //convert to toString
let query = 'Select * from table_name where column_name in (${exampleToString})'; //Execute the query to get response