Проверьте, начинается ли какой-либо из элементов массива с определенных символов postgres - PullRequest
1 голос
/ 05 июля 2019

Я пытаюсь проверить, есть ли в массиве какой-либо из элементов, который начинается или заканчивается указанной строкой.

Для сравнения строк мы можем сделать что-то вроде ниже,

select * from table where 'gggggg' ilike '%g';

Может ли кто-нибудь помочь выяснить, содержит ли массив значения, подобные шаблону.
Например, массив: ['str1', 'str2', 'str3']

Также я хочу выяснить, заканчивается ли какой-либо из элементов 1 или начинается с 'str'.

1 Ответ

2 голосов
/ 05 июля 2019

Пока единственное, что вы можете сделать, - это развернуть массив и проверить каждый элемент:

create table test (a text[]);

insert into test values (array['abc', 'def', 'ghi']);

select distinct a from test
JOIN lateral (select * from unnest(a) as u) as sub on TRUE
WHERE u like '%g';
 a
---
(0 rows)

select distinct a from test
JOIN lateral (select * from unnest(a) as u) as sub on TRUE
WHERE u like 'g%';
       a
---------------
 {abc,def,ghi}
(1 row)

В postgres 12 вы сможете использовать jsonb_path_exists. Конечно, это будет работать лучше, если вы сохраните свои данные в jsonb, но все равно будет работать, но не так эффективно:

-- Starts with g
select a from test 
where jsonb_path_exists(to_jsonb(a), '$[*] ? (@ like_regex "^g")');
       a
---------------
 {abc,def,ghi}
(1 row)

-- Ends with g
select a from test 
where jsonb_path_exists(to_jsonb(a), '$[*] ? (@ like_regex "g$")');
 a
---
(0 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...