【发布时间】:2021-02-04 17:23:39
【问题描述】:
我使用 pl pgsql 创建函数,我无法将我的插入查询转换为如下所述以格式化动态 sql,我尝试了两天但没有得到它。这是我在这里的第一家酒吧 有人可以帮忙吗?
谢谢,
** 我的代码是**
execute $$
INSERT INTO $$result_table$$
(Id, ts.date_, flo_nbr, duration)
SELECT * from (
select
Id, ts.date_,
(case
When TRIM(set) ~ '^H[0-9]{1}/FLO0R0/$'
Then 'FLO0R0'
When TRIM(set) ~ '^H[0-9]{1}/FLOOR1/$'
Then 'FLOOR1'
end) as flo_nbr,
sum(extract(epoch from (least(s.end, ts.date_+time_) -
greatest(s.beg, ts.date_)
)
)) as duration
from source s cross join lateral
generate_series(date_trunc('day', s.beg), date_trunc('day',
least(s.end,
CASE WHEN $$||quote_literal(date_construction)||$$ = '2012-01-01'
THEN (current_date)
ELSE $$||quote_literal(date_construction)||$$
END)
), interval '1 day') ts(date_)
where ( (beg, end) overlaps ($$||quote_literal(date_construction)||$$'00:00:00', $$||quote_literal(date_construction)||$$'23:59:59'))
group by id, ts.date_, flo_nbr
) as temp
where ($$||quote_literal(date_construction)||$$ = temp.date_ and
$$||quote_literal(date_construction)||$$ != '2012-01-01')
OR ($$||quote_literal(date_construction)||$$ ='2012-01-01')
【问题讨论】:
-
你确定你和@biwia不是同一个人?这看起来与this code 太相似了,不可能是巧合。
-
没有@LaurenzAlbe,但我会阅读他发布的内容。
-
没有 plpgsql,你的 INSERT-SELECT-statement 应该是什么样子?当该部分工作时,只需将 WHERE 条件替换为动态项目。帮自己一个忙,开始使用 EXECUTE ... USING() 语句。 postgresql.org/docs/13/…
-
为什么要为每个新问题注册一个新用户?