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);