gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:58:29 26 4
gpt4 key购买 nike

我必须选择表(我们称之为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com