我有一些代码可以创建动态查询。我的一个问题是在特定地点获得双引号,目前我很难过。
这是我的简单函数返回查询(此函数有更多功能,返回的查询进一步用于更多代码,但这与手头的问题无关,所以我为了简单起见缩短了它):
create or replace function pivotcode (tablename varchar, rowc varchar, colc varchar,
cellc varchar, celldatatype varchar) returns varchar language plpgsql as $$
declare
dynsql1 varchar;
dynsql2 varchar;
columnlist varchar;
begin
dynsql1 = 'select string_agg(distinct ''''||'||colc||'||'' '||celldatatype||''', '',''
order by ''''||'||colc||'||'' '||celldatatype||''') from '||tablename||';';
return dynsql1;
end
$$
您可以像这样调用函数:
select pivotcode('custuserfieldsvalues','userid','attributename','attributevalue','varchar');
它目前返回如下查询:
select string_agg(distinct ''||attributename||' varchar', ','
order by ''||attributename||' varchar') from custuserfieldsvalues;
然而,我需要它返回的是这样的:
select string_agg(distinct '"'||attributename||'" varchar', ','
order by '"'||attributename||'" varchar') from custuserfieldsvalues;
第二个在 attributename 周围有双引号,以便在执行最终查询后,正确引用任何带空格的文本。
有人可以帮助我对 _dynsql1 = 行进行哪些更改以获得我想要的结果?
答案 0 :(得分:2)
使用format()
dynsql1 := format('select string_agg(distinct %I, %I order by %I, %I) from %I', colc, celldatatype, colc, colldatatype, tablename);
占位符%I
用于"标识符"并在必要时正确引用它们。