actName | applicable | status | id |
-----------------------------------------------------
test1 | {"applicable":[1,3,7]} | 1 | 1 |
test2 | {"applicable":[5,4,1]} | 1 | 2 |
是否可以检查数组中的值?例如,如果我试图在适用的行列中找到哪一行包含整数值
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
值(因此数组元素)可以是任何类型,因此需要使用integer
将它们转换为::text::int
。您需要子选择来检查数组中具有id
值的3
值。注意,这将返回具有相同数组值的多行。如果一行中可能有多个重复的数组值,则应SELECT DISTINCT *
以避免多次返回同一行。SQLFiddle