Arrays 如何使用where子句检查postgres中数组中是否存在值
是否可以检查数组中的值是否适用?例如,如果我试图在行列中找到哪一行包含整数值Arrays 如何使用where子句检查postgres中数组中是否存在值,arrays,json,postgresql,Arrays,Json,Postgresql,是否可以检查数组中的值是否适用?例如,如果我试图在行列中找到哪一行包含整数值3,则它必须返回第一行 结果: actName | applicable | status | id | ----------------------------------------------------- test1 | {"applicable":[1,3,7]} | 1 | 1 | test2 | {"applicable":[5,4,1]} |
3
,则它必须返回第一行
结果: actName | applicable | status | id |
-----------------------------------------------------
test1 | {"applicable":[1,3,7]} | 1 | 1 |
test2 | {"applicable":[5,4,1]} | 1 | 2 |
您需要函数
json\u array\u elements()
来取消json数组的测试,以便检查它的元素。那么就很容易了:
actName | applicable | status | id |
-----------------------------------------------------
test1 | {"applicable":[1,3,7]} | 1 | 1 |
由于json
值(以及数组元素)可以是任何类型,因此需要使用::text::int
将它们转换为整数。您需要选择子项来检查数组中具有值3
的id
值。请注意,这将返回具有相同数组值的多行。如果一行中可能有多个重复的数组值,则应选择DISTINCT*
,以避免多次返回同一行
我不太熟悉postgres中的数组,但乍一看,我会尝试从表中选择*,如“%,3,%”
.PG版本?json
或jsonb
类型的列适用吗?适用的是json
类型它给出了错误错误:语法错误位于或接近“sub”
对我来说,它工作得非常好,第9.4.5页。你把括号都弄对了吗?
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);