PostgreSQL 在 jsonb 数据的数组中按值查找

PostgreSQL find by value in array in jsonb data

如何从 table 中获取记录,其中列 value 中的数组包含要查找的任何值。

好吧,该列可以包含数组、对象、字符串等任何数据类型和空值。列中的数组可以包含任何可序列化的数据类型

id|value       |
--+------------+
 1|null        |
 2|[0.05, 0.11]|

一些示例:

-- sample 1 
with sample_data as (
    select 1 as "id", null::jsonb as "value"
    union all 
    select 2 as "id", '[0.05, 0.11]'::jsonb as "value"
)
select a2.pval::float4 from sample_data as a1 
cross join jsonb_array_elements(a1."value") as a2(pval)
--Return: 
0.05
0.11


-- sample 2
with sample_data as (
    select 1 as "id", null::jsonb as "value"
    union all 
    select 2 as "id", '[0.05, 0.11]'::jsonb as "value"
)
select a2.pval::float4 from sample_data as a1 
cross join jsonb_array_elements(a1."value") as a2(pval)
where a2.pval::float4 > 0.1 
--Return: 
0.11

您可以使用 JSON 路径表达式:

select *
from the_table
where value @@ '$[*] == 0.11'

如果该列不包含数组,您可以使用

select *
from the_table
where value @@ '$.* == 0.11'

这假设 value 被定义为 jsonb(它应该是)。如果不是,则必须施放它 value::jsonb

Online example