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
如何从 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