如何从postgresql中的json输入中提取值?
我正在使用PostgreSQL存储函数,我需要从JSON输入中提取值,并与表中的列匹配,然后以JSON格式返回表。 我的JSON输入如何从postgresql中的json输入中提取值?,json,postgresql,stored-functions,Json,Postgresql,Stored Functions,我正在使用PostgreSQL存储函数,我需要从JSON输入中提取值,并与表中的列匹配,然后以JSON格式返回表。 我的JSON输入 { "sensor":"sensor1", "fromdate":date, "todate":"date } 这是我迄今为止工作过的函数 select array_to_json(array_agg(row_to_json(d))) from (
{
"sensor":"sensor1",
"fromdate":date,
"todate":"date
}
这是我迄今为止工作过的函数
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($1) 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;
您只需使用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;
谢谢您的回答,先生,但是我得到的结果是null,您是否将相同的fromdate和ToDate放入创建或替换函数报告sss param1 jsonb返回jsonb作为$body$declare jsondata jsonb;begin jsondata=从选择传感器、id、值、,从探测器数据创建的日期,其中传感器=param1->“传感器”::varchar和创建的日期>=param1->“fromdate”::时间戳和创建的日期>“todate”::时间戳d;返回jsondata;结束$体语言plpgsql;我的意思是输入中fromdate和todate的值jsonI正在传递这样的值,从public.reportsss中选择*[{fromdate:2020-02-03T12:02,sensor:System1.orp.orp,todate:2020-07-04T12:02}]'谢谢您的回答,先生,但是我得到的结果是null,如果您将相同的fromdate和ToDate放入创建或替换函数报告SSS param1 jsonb将jsonb返回为$body$declare jsondata jsonb;begin jsondata=从选择传感器、id、值、,从探测器数据创建的日期,其中传感器=param1->“传感器”::varchar和创建的日期>=param1->“fromdate”::时间戳和创建的日期>“todate”::时间戳d;返回jsondata;结束$体语言plpgsql;我指的是输入jsonI中fromdate和todate的值,我正在传递这样的值,从public.reportsss'[{fromdate:2020-02-03T12:02,sensor:System1.orp.orp,todate:2020-07-04T12:02}]