如何从 postgresql 中的 json 输入中提取值?
How to extract the values from json input in postgresql?
我正在使用 PostgreSQL 存储函数,我需要从 JSON 输入中提取值并与 table 和 return 中的列匹配 table JSON 格式。
我的 JSON 输入,
{
"sensor":"sensor1",
"fromdate":date,
"todate":"date
}
my sensortable
这是我到目前为止工作的功能
select array_to_json(array_agg(row_to_json(d)))
from (
select sensor,id,value,created_date
from probe_data
where probe_data.sensor =sensors
AND probe_data.created_date >=fromdate AND probe_data.created_date <= todate
) d
select x.sensores,x.fromdate,x.todate from json_to_recordset() x
(
sensors text,
fromdate timestamp,
todate timestamp)
如您所见,我可以从 JSON 输入中获取数据,但我不知道如何在 WHERE 条件下访问它。我需要一些帮助才能做到这一点。
您可以简单地使用 JSONB
运算符来实现,如下所示:
试试这个:
create or replace function example (param1 jsonb)
returns table (sensor_ varchar, id_ int, value_ numeric, created_date_ TIMESTAMP)
as
$body$
begin
RETURN query
select sensor, id, value, created_date from probe_data
where
created_date >=(param1->>'fromdate')::TIMESTAMP
and
created_date <= (param1->>'todate')::TIMESTAMP;
end;
$body$
LANGUAGE plpgsql;
如果你想要上面的输出 JSON ARRAY
格式那么
试试这个:
create or replace function example1 (param1 jsonb)
returns jsonb
as
$body$
declare
jsondata jsonb;
begin
jsondata = (select
array_to_json(array_agg(row_to_json(d))) from (
select sensor, id, value, created_date from probe_data
where
created_date >=(param1->>'fromdate')::TIMESTAMP
and
created_date <= (param1->>'todate')::TIMESTAMP ) d);
RETURN jsondata;
end;
$body$
LANGUAGE plpgsql;
我正在使用 PostgreSQL 存储函数,我需要从 JSON 输入中提取值并与 table 和 return 中的列匹配 table JSON 格式。 我的 JSON 输入,
{
"sensor":"sensor1",
"fromdate":date,
"todate":"date
}
my sensortable 这是我到目前为止工作的功能
select array_to_json(array_agg(row_to_json(d)))
from (
select sensor,id,value,created_date
from probe_data
where probe_data.sensor =sensors
AND probe_data.created_date >=fromdate AND probe_data.created_date <= todate
) d
select x.sensores,x.fromdate,x.todate from json_to_recordset() x
(
sensors text,
fromdate timestamp,
todate timestamp)
如您所见,我可以从 JSON 输入中获取数据,但我不知道如何在 WHERE 条件下访问它。我需要一些帮助才能做到这一点。
您可以简单地使用 JSONB
运算符来实现,如下所示:
试试这个:
create or replace function example (param1 jsonb)
returns table (sensor_ varchar, id_ int, value_ numeric, created_date_ TIMESTAMP)
as
$body$
begin
RETURN query
select sensor, id, value, created_date from probe_data
where
created_date >=(param1->>'fromdate')::TIMESTAMP
and
created_date <= (param1->>'todate')::TIMESTAMP;
end;
$body$
LANGUAGE plpgsql;
如果你想要上面的输出 JSON ARRAY
格式那么
试试这个:
create or replace function example1 (param1 jsonb)
returns jsonb
as
$body$
declare
jsondata jsonb;
begin
jsondata = (select
array_to_json(array_agg(row_to_json(d))) from (
select sensor, id, value, created_date from probe_data
where
created_date >=(param1->>'fromdate')::TIMESTAMP
and
created_date <= (param1->>'todate')::TIMESTAMP ) d);
RETURN jsondata;
end;
$body$
LANGUAGE plpgsql;