gpt4 book ai didi

arrays - 检查 Postgres 中的数组中是否存在多个值中的任何一个

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

检查数组中是否存在一个值非常简单。例如,以下将返回 true。

SELECT 'hello' = ANY(ARRAY['hello', 'bees'])

但是如果我想检查数组中是否存在多个值怎么办?例如,如果数组中存在“hello”或“bye”,我想返回 true。我想做类似的事情

SELECT ['hello', 'bye'] = ANY(ARRAY['hello', 'bees'])

但这似乎不起作用。

编辑:

我还想弄清楚如何检查数组中是否存在多个值中的任何一个,其中多个值具有共同的前缀。

例如,如果我想在数组包含任何前缀为“hello”的元素时返回 true。所以我基本上想要类似的东西

SELECT ARRAY['hello%'] && ARRAY['helloOTHERSTUFF']

是真的。

最佳答案

要检查任何数组元素是否存在于另一个数组中,请使用重叠 &&像这样的运算符:

SELECT ARRAY[1,4,3] && ARRAY[2,1] -- true

检查每个数组元素是否匹配您可以使用的特定模式 unnest(anyarray) (提取数组元素)函数结合 LIKE or POSIX Regular Expressions (应用模式匹配)和聚合 bool_and(expression) - 执行按位与运算符并返回一行输出。

测试用例:

我将数组元素放在不同的行中,以阐明哪个比较结果为真,哪个为假。

SELECT bool_and(array_elements)
FROM (
SELECT unnest(
ARRAY[
'hello', -- compared with LIKE 'hello%' yields true
'helloSOMething', -- true
'helloXX', -- true
'hell', -- false
'nothing' -- false
]) ~~ 'hello%'
) foo(array_elements);

因此,如果任何比较结果为 false,则 bool_and(array_elements) 将返回 false。

注意:如果您需要将您的数组与多个模式进行比较,您可以使用 POSIX 比较并使用 | 代表替代。举个例子,假设我们想知道数组的每个元素是否以 hellonot 单词开头:

SELECT bool_and(array_elements)
FROM (
SELECT unnest(
ARRAY[
'hello', -- true
'helloSOMething', -- true
'helloXX', -- true
'hell', -- false (doesn't start with neither "hello" nor "not")
'nothing' -- true (starts with not)
]) ~ '^hello|not' -- note the use of ~ instead of ~~ as earlier (POSIX vs LIKE)
) foo(array_elements);

关于arrays - 检查 Postgres 中的数组中是否存在多个值中的任何一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38881063/

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