首页 > 解决方案 > 如何在PostgreSQL中检查数组是否包含包含字符串的元素

问题描述

PostgreSQL 版本:9.6

email在表中有列users。(例如john@aaa.org

我有一组 url 域。(例如 [ www.aaa.org, www.bbb.io, ccc.ddd.com, eee.com])

现在我想检索数组中包含一个元素的所有电子邮件,该元素具有一个电子邮件域作为子字符串。

这就是我得到的,这显然是错误的。

select email from users where SPLIT_PART(email, '@', 2) like any (array['www.aaa.org', 'www.bbb.io', 'ccc.ddd.com'])

如果我有这样的记录:

users
---
id| email
1 | john@aaa.org
2 | john@bbb.io
3 | john@ccc.ddd.com
4 | john@ddd.com

我想检索用户1、2、3 的电子邮件。

标签: sqlpostgresql

解决方案


这是一种方法来做你想做的事:

select *
from users u
where exists (select 1
              from unnest(array['www.aaa.org', 'www.bbb.io', 'ccc.ddd.com', 'eee.com']) ar
              where split_part(u.email, '@', 2) = replace(ar, 'www.', '')
             );

是一个 db<>fiddle。


推荐阅读