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 |
答案 0 :(得分:2)
你需要函数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
的{{1}}值。请注意,这将返回具有相同数组值的多个行。如果单行中可能存在多个重复的数组值,则应3
以避免多次返回同一行。
<强> SQLFiddle 强>