PostgreSQL - 使用函数在选择查询中命名列
Posted
技术标签:
【中文标题】PostgreSQL - 使用函数在选择查询中命名列【英文标题】:PostgreSQL - Use a function to name a column in a select query 【发布时间】:2019-01-29 22:41:19 【问题描述】:我正在尝试动态设置“select .. from”查询中的列名。所以我创建了一个函数来返回列的名称并尝试在选择查询中使用它。
功能就是这个:
CREATE OR REPLACE FUNCTION get_column_name(iddoc int, campo text) RETURNS text
AS $$
#print_strict_params on
DECLARE
campoid text;
BEGIN
SELECT campo_id INTO STRICT campoid
FROM campos_td c
JOIN (SELECT field4, field3
FROM frm7
WHERE iddocumento = iddoc) f ON c.tema_id = f.field3
RETURN 'field10' || campoid;
END
$$ LANGUAGE plpgsql;
我已经尝试过这样的事情:
SELECT get_column_name(2, 'Size') FROM frm7
SELECT f.get_column_name(2, 'Size') FROM frm7 as f
但它们都不起作用。
【问题讨论】:
聪明,但 SQL 不能那样工作。函数不能返回标识符。列需要硬编码。 【参考方案1】:pgsql EXECUTE
command 允许您运行任意 SQL 字符串,尤其是您使用在运行时传入的列名构建的 SQL 字符串。
【讨论】:
我尝试了以下方法:准备查询(文本)AS SELECT $1 FROM frm7 f EXECUTE query1 (get_column(2, 'Asunto'))。但结果是选择某些文本而不是选择列,因此结果不是预期的。 这是EXECUTE
的不同用法。你想要EXECUTE
inside 一个 PGSQL 存储过程。 (请参阅答案中的链接。)您的最终结果将类似于SELECT * FROM my_stored_procedure('column_foo');
。是否将其作为准备好的语句或仅作为原始 SQL 查询执行取决于您,并且可能并不重要。【参考方案2】:
我对sql不太熟悉,但你可以试试这个:
DECLARE @query NVARCHAR(MAX);
set @query = 'SELECT ' + get_column_name(2, 'Size') + ' FROM frm7';
execute @query;
示例:
DECLARE @query NVARCHAR(MAX);
DECLARE @colName NVARCHAR(MAX) = 'col1';
set @query = 'SELECT ' + @colName + ' FROM frm7';
execute @query;
【讨论】:
以上是关于PostgreSQL - 使用函数在选择查询中命名列的主要内容,如果未能解决你的问题,请参考以下文章