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