【问题标题】:if else postgres procedure with parametersif else 带有参数的 postgres 过程
【发布时间】:2017-05-19 10:44:42
【问题描述】:

我有这样的查询

CREATE  FUNCTION getVisitChartByClient(date_from DATE, date_to DATE, statusname TEXT, club_uuid TEXT) 

RETURNS TABLE(date date, entries bigint) AS $$
DECLARE
   ids UUID[];
BEGIN
ids = string_to_array(club_uuid,',');

        RETURN QUERY  SELECT d.date, count(v.id) AS entries
            FROM (SELECT  i::date AS date
                  FROM generate_series(date_from, date_to, '1 day'::interval) i
                 ) d 
                 LEFT  JOIN (
                     SELECT v.created_at, v.id FROM visit AS v 
                     LEFT JOIN club AS c ON v.club_id= c.id
                     AND status = statusname
                     AND c.uuid = ANY(ids)
                     GROUP BY v.id
                     ) AS v

                 ON d.date = v.created_at::date
            GROUP BY d.date
            Order By d.date ASC;


END;
$$ LANGUAGE plpgsql;

但有时我不想传递状态名或俱乐部 ID,如何在查询中使用 IF ELSE 语句,或者如何创建查询然后执行?

【问题讨论】:

    标签: sql postgresql stored-procedures plpgsql


    【解决方案1】:

    尝试:

    AND status = coalesce(statusname,status)
    

    AND case when club_uuid is null then then true else c.uuid = ANY(ids) end
    

    所以:

        RETURN QUERY  SELECT d.date, count(v.id) AS entries
            FROM (SELECT  i::date AS date
                  FROM generate_series(date_from, date_to, '1 day'::interval) i
                 ) d 
                 LEFT  JOIN (
                     SELECT v.created_at, v.id FROM visit AS v 
                     LEFT JOIN club AS c ON v.club_id= c.id
                     AND status = coalesce(statusname,status)
                     AND case when club_uuid is null then then true else c.uuid = ANY(ids) end
                     GROUP BY v.id
                     ) AS v
    
                 ON d.date = v.created_at::date
            GROUP BY d.date
            Order By d.date ASC;
    

    当然,您需要将 NULL 传递给函数,而不是“正常”值

    【讨论】:

      猜你喜欢
      • 2019-09-07
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多