我正在尝试检查一个数组是否有任何以指定字符串开头或结尾的元素。
为了比较字符串,我们可以做如下的事情,
select * from table where 'gggggg' ilike '%g';
谁能帮忙找出一个数组是否包含类似模式的值。
例如数组:['str1', 'str2', 'str3']
我还想查找是否有任何元素以 1 结尾或以“str”开头。
最佳答案
现在,您唯一能做的就是取消嵌套数组并测试每个元素:
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)
关于sql - 检查是否有任何数组元素以特定字符 postgres 开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56908367/