sql - 了解 ILIKE 数组的任何元素 - postgresql

标签 sql postgresql

我必须选择表(我们称之为 mytable)中给定列(我们称之为 mycolumn)中的值为 等于“A”且等于“S”。

所以我尝试了类似的东西

SELECT * FROM mytable WHERE mycolumn NOT ILIKE ANY(ARRAY['A','S'])

我更喜欢使用 ILIKE 而不是使用 = 来测试字符串相等性,因为值 'A' 和 'S' 可能以小写形式出现我的数据,所以我希望也排除值“s”和“a”。

奇怪的是,上面的查询确实返回了一些行,其中 mycolumn 中的值等于“A”。我很惊讶。

因此,为了了解发生了什么,我尝试进行一个非常简单的逻辑测试:

SELECT ('A' ILIKE ANY(ARRAY['A','S'])) as logical_test ;

上面的语句返回 TRUE,这是预期的。

但是下面的语句也返回 TRUE,这就是我迷路的地方:

SELECT ('A' NOT ILIKE ANY(ARRAY['A','S'])) as logical_test ;

有人可以解释为什么 'A' NOT ILIKE ANY(ARRAY['A','S']) 被 PostgreSQL 认为是 TRUE 吗?

最佳答案

如果数组中至少有一个元素符合条件,则 ANY 比较的结果为真。

作为'S'不同于'A' ANY 的结果是真的(因为至少 一个 元素是不同的)。

您正在寻找 ALL运算符(operator):

SELECT * 
FROM mytable 
WHERE mycolumn NOT ILIKE ALL(ARRAY['A','S'])

关于sql - 了解 ILIKE 数组的任何元素 - postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49557830/

相关文章:

postgresql - psql 复制命令挂起大型 CSV 数据集

Postgresql 窗口函数的数值精度错误

sql - 尝试将 SQL Server 2008 (SP2) 升级到 SQL Server 2012 时出错 : There was a failure to calculate the applicability of setting LICENSEPATH

sql - 在没有动态 SQL 的情况下对多个表运行相同的查询

postgresql - Eloquent 中具有不同关系的嵌套 wherehas

sql - 在 postgresql 中合并行

sql - 如何进行 SQL 查询以选择包含特定子字符串的所有项目?

mysql - 与其他列更新

sql - 如何根据 Postgres 中的过滤条件更新深度嵌套的 JSON 对象?

sql - 将数组从 jsonb_array_elements_text() 转换为整数数组