Sql 函数参数,Postgres

Sql 函数参数,Postgres,sql,postgresql,Sql,Postgresql,我将参数作为json(Postgres)传递给函数。参数集可能会更改。是否可以检查条件中是否存在参数?像这样的情况?谢谢 CREATE OR REPLACE FUNCTION tmp.f_search(dateFrom timestamp, dateTo timestamp, data_in json DEFAULT NULL::json) RETURNS TABLE(id character varying, dateodb timestamp ) LANGUAGE plpgsql AS $

我将参数作为json(Postgres)传递给函数。参数集可能会更改。是否可以检查条件中是否存在参数?像这样的情况?谢谢

CREATE OR REPLACE FUNCTION tmp.f_search(dateFrom timestamp, dateTo timestamp, data_in json DEFAULT NULL::json)
RETURNS TABLE(id character varying, dateodb timestamp )
 LANGUAGE plpgsql
AS $function$
DECLARE
BEGIN

    RETURN QUERY 
      WITH tr AS (
        select t1.id,t1.dateodb
          from t1
         where 
          (case
         when json_object_keys(data_in->'name') is not null then
         t1.name = (data_in->'name') 
         end)
         limit 201)
        select * from tr;
     END
$function$
;   
如果用户将日期和
“name”
传递给JSON,则条件如下

where t1.name = (data_in -> 'name')
如果用户还传递了
“姓氏”
,则条件如下

where t1.name = (data_in -> 'name') and t1.surname = (data_in -> 'surname')
您可以查询:

WHERE t1.name = data_in->'name'
AND (NOT (data_in ? 'surname') OR t1.surname = data_in->'surname')
当然,这样的查询不能在
t1.姓氏上使用索引(因为

因此,最好编写两个函数,其中一个函数带有一个额外的参数
姓氏和一个不同的查询,而不是将所有参数都塞进一个JSON中


或者,在PL/pgSQL中编写一个函数,根据您传递的参数运行不同的查询。

您的问题不清楚。有什么问题?也许与NULL不同的默认值可以满足您的需要。我想检查输入参数是否存在,并在条件中替换它。传输的参数集可能会改变。您能否具体说明“在场”的含义?价值总是存在的。您的意思是,如果用户使用默认值,您希望使用不同的查询吗?