我有一些创建动态查询的代码。我的一个问题是在一个特殊的地方得到双引号,现在我被难住了。
下面是我的简单函数,它返回查询(这个函数有更多的内容,返回的查询在更多的代码中进一步使用,但这与当前的问题无关,因此为了简单起见,我将它缩短了):

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=行做些什么更改来得到我想要的结果吗?

最佳答案

使用format()

dynsql1 := format('select string_agg(distinct %I, %I order by %I, %I) from %I', colc, celldatatype, colc, colldatatype, tablename);

占位符%I用于“标识符”,如果需要,将正确引用它们。

关于sql - 将引号连接到我的字符串时遇到麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49202651/

10-16 17:14