gpt4 book ai didi

postgresql - 将字符串转换为列名

转载 作者:行者123 更新时间:2023-11-29 12:20:42 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 postgres 函数,它看起来或多或少像这样:

CREATE OR REPLACE FUNCTION USER_TOTALS(column_name varchar, in_t users) RETURNS float AS $$
DECLARE
sum float;
BEGIN
sum = (SELECT SUM($1) FROM jobs WHERE jobs.technician_id = in_t.id);
RETURN sum;
END;
$$ LANGUAGE plpgsql;

我需要像那样使用它:

SELECT users.*, USER_TOTALS('jobs.price', users.*) AS total_price_value FROM users;

但是,这显然是行不通的,因为 SUM() 函数期望获得一个列名,但我的代码将一个 varchar 传递给它,所以错误说:

Function sum(character varying) does not exist

问题是——我能否以某种方式将 varchar 变量转换为列名 var 类型?我已经在谷歌上搜索了大约 2 个小时,但我不知道该如何实现。

最佳答案

推荐的形式:

CREATE OR REPLACE FUNCTION USER_TOTALS(column_name varchar, in_t users) 
RETURNS float AS $$
DECLARE
sum float;
BEGIN
EXECUTE format('SELECT SUM(%I) FROM jobs WHERE jobs.technician_id=$1', column_name)
INTO sum
USING in_t;
RETURN sum;
END;
$$ LANGUAGE plpgsql;

关于postgresql - 将字符串转换为列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com