gpt4 book ai didi

arrays - 如何使用where子句检查postgres中数组中是否存在值

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

 actName |       applicable       | status | id | 
-----------------------------------------------------
test1 | {"applicable":[1,3,7]} | 1 | 1 |
test2 | {"applicable":[5,4,1]} | 1 | 2 |

是否可以检查数组适用中的值?例如。如果我尝试在 applicable 行列中查找哪一行包含整数值 3,那么它必须返回第一行。

结果:

 actName |       applicable       | status | id | 
-----------------------------------------------------
test1 | {"applicable":[1,3,7]} | 1 | 1 |

最佳答案

您需要函数 json_array_elements() 来解除 json 数组的嵌套,以便您可以检查它的元素。那么就很简单了:

SELECT *
FROM my_table
WHERE id IN (
SELECT id
FROM (
SELECT id, json_array_elements(applicable->'applicable')::text::int AS chk
FROM my_table) sub
WHERE chk = 3);

由于 json 值(以及数组元素)可以是任何类型,因此需要使用 ::text::int< 将它们转换为 integer/。您需要子选择来检查数组中具有值 3 的那些 id 值。请注意,这将返回具有相同数组值的多行。如果一行中可以有多个重复的数组值,您应该 SELECT DISTINCT * 以避免多次返回同一行。

SQLFiddle

关于arrays - 如何使用where子句检查postgres中数组中是否存在值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34760929/

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