sql - 如何在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 的电子邮件。
解决方案
这是一种方法来做你想做的事:
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。
推荐阅读
- laravel - 向雄辩的 Mongodb laravel 模型添加新文件
- doctrine - OrWhere 声明原则 1
- html - 如何制作一个覆盖屏幕所有区域的div,除了固定div覆盖的区域?
- java - Spring 测试仅在我的系统中失败
- javascript - 变量值固定为 0(函数内部)
- c++11 - 如何在数组中找到第k个元素?
- jenkins - 无法用 groovy 解析 xml
- service-worker - 使用 Workbox 管理具有多个 Service Worker 客户端的缓存
- node.js - select value does not display
- c# - 断言有关拖放的错误