Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从postgresql中的json输入中提取值?_Json_Postgresql_Stored Functions - Fatal编程技术网

如何从postgresql中的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 (

我正在使用PostgreSQL存储函数,我需要从JSON输入中提取值,并与表中的列匹配,然后以JSON格式返回表。 我的JSON输入

{
"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}]