无法将引号连接到我的字符串中

时间:2018-03-09 21:46:59

标签: sql postgresql

我有一些代码可以创建动态查询。我的一个问题是在特定地点获得双引号,目前我很难过。

这是我的简单函数返回查询(此函数有更多功能,返回的查询进一步用于更多代码,但这与手头的问题无关,所以我为了简单起见缩短了它):

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 = 行进行哪些更改以获得我想要的结果?

1 个答案:

答案 0 :(得分:2)

使用format()

可以做得更好
dynsql1 := format('select string_agg(distinct %I, %I order by %I, %I) from %I', colc, celldatatype, colc, colldatatype, tablename);

占位符%I用于"标识符"并在必要时正确引用它们。