sql - 检查是否有任何数组元素以特定字符 postgres 开头

标签 sql ruby-on-rails postgresql

我正在尝试检查一个数组是否有任何以指定字符串开头或结尾的元素。

为了比较字符串,我们可以做如下的事情,

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/

相关文章:

sql - Oracle SQL 更新语句以什么顺序更改列值?

sql - 给定步骤的当前时间交替真/假标志

ruby-on-rails - 引用错误 : navigator is not defined using ReactJS on Ruby on Rails server side rendering

mysql - 将 MySQL View 转换为 Postgres

sql - 复杂的 Join Query,Join 3 tables with multiple group bys

mysql - count命令与mysql实际总行数的区别

ruby-on-rails - Rails 查询关联模型范围

ruby-on-rails - 将填写的表格保存到数据库 - Ruby on rails

mysql - 将旧版 MySQL 脚本转换为 Postgres 9.5

PostgreSQL - 如果输入错误,如何取消在 psql 终端中输入的内容?