sql - postgres && - 带有通配符的数组重叠运算符
问题描述
在 postgres
select array['some', 'word'] && array ['some','xxx'] -- return true
select array['some', 'word'] && array ['','word'] -- return true
我想知道如何将 % 通配符与 && 运算符结合使用。
select array['some%', 'word'] && array ['','some'] -- I was thinking this will return true but it doesn't.
我想检查一个文本数组是否至少包含另一个文本数组的一个元素。第一个文本数组可以包含通配符。最好的方法是什么?
解决方案
您可以尝试unnest
解析两个数组的每个元素并使用LIKE
or比较它们ILIKE
:
SELECT EXISTS(
SELECT
FROM unnest(array['some%', 'word']) i (txt),
unnest(array ['','some']) j (txt)
WHERE j.txt LIKE i.txt) AS overlaps;
overlaps
----------
t
(1 row)
如果要将 应用于%
所有数组元素,只需将其直接放在or运算符的WHERE
子句中即可:LIKE
ILIKE
SELECT EXISTS(
SELECT
FROM unnest(array['some', 'word']) i (txt),
unnest(array ['','XXsomeXX']) j (txt)
WHERE j.txt LIKE '%'||i.txt||'%') AS overlaps;
overlaps
----------
t
(1 row)
演示:db<>fiddle
推荐阅读
- python - YouTube-DL Python 输出文件格式不是 mp4
- oracle - 我正在尝试移动一些行并将它们转换为列
- java - 使用 Tableau Server 生成备份时出错
- bash - 如何根据音频长度批量自动生成视频
- python - 在 Python 中对具有相似名称的列进行分组
- woocommerce - WooCommerce 最近的产品分页限制总体和每页
- spring-boot - 在 Spring Boot 中运行测试时,Liquibase 没有从 test/resources 目录中获取变更集
- android - 如何在 Flutter WebView 或 InAppWebView 中添加 JavaScriptInterface?
- snowflake-cloud-data-platform - 时间戳减少 1000 倍
- menu - LocalStorage - 单独选择