Postgres: 배열 필드에 값이 포함되어 있는지 확인하십시오.
답이 어딘가에 있다는 점에서 중복된 질문이라고 확신합니다만, 구글 검색 후 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
"Journal"이 있는 모든 행을 찾고 싶습니다.pub_types.
저는 문서를 찾아서 구글에 검색해 보았습니다. 그리고 제가 시도한 것은 다음과 같습니다.
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"}';
일부 값 중 하나를 포함하는 배열을 검색하려면 && 연산자를 사용할 수 있습니다.
예를들면,
SELECT * FROM mytable WHERE pub_types && '{"Journal", "Book"}';
원하는 순서로 지정할 수 있습니다.
포스트그레스 사용하기array_to_string()메소드를 사용하면 배열에서 문자열의 일부로 나타나는 '저널'과 일치할 수 있습니다.
select * from mytable
where array_to_string(pub_types, ',') like '%Journal%'
정확한 단어 'Journal'만 일치시키려면 와일드카드를 제거합니다.
select * from mytable
where array_to_string(pub_types, ',') = 'Journal'
참고: https://www.postgresql.org/docs/9.1/functions-array.html
대신에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[]));
예: https://www.db-fiddle.com/f/LaUNi42HVuL2WufxQyEiC/0
언급URL : https://stackoverflow.com/questions/39643454/postgres-check-if-array-field-contains-value
'programing' 카테고리의 다른 글
| 경로가 파일인지 디렉토리인지 확인하는 더 좋은 방법은 무엇입니까? (0) | 2023.05.08 |
|---|---|
| 목록의 각 요소에 함수 적용 (0) | 2023.05.03 |
| f-string과 원시 문자열 리터럴 결합 (0) | 2023.05.03 |
| Swift에서 NSLocalizedString에 해당하는 것은 무엇입니까? (0) | 2023.05.03 |
| 아키텍처 암 v7에 대한 정의되지 않은 기호 (0) | 2023.05.03 |