我已定义此函数,以修剪尾随空格:
create or replace function trim_trailing_whitespace(value text) returns text as $$ begin return regexp_replace(value, '\s+$', ''); end; $$ language plpgsql immutable;
在像这样的查询中使用时,它可以正常工作:
select trim_trailing_whitespace(SomeColumn), count(*) from MyTable group by SomeColumn;
然而,当我尝试使用通配符时,它失败了,如下所示:
select trim_trailing_whitespace(*) from MyTable;
第1行:从MyTable中选择trim_trailing_whitespace(*);
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
如何在select查询中的所有列上执行函数?在我的情况下,我想在执行选择时修剪每列的尾随空格。
答案 0 :(得分:0)
如果可能,请定义函数的第二个VARIADIC
版本。使用FOREACH
迭代args并在每个参数上执行当前函数。
这里的好例子:https://www.depesz.com/2008/07/31/waiting-for-84-variadic-functions/
答案 1 :(得分:0)
您可以手动使用动态sql或展开*
。
SELECT FORMAT(
'SELECT %s FROM %I.%I.%I;',
string_agg(
FORMAT(
'trim_trailing_whitespace(%I)',
column_name
),
', '
)
, table_catalog, table_schema, table_name
)
FROM information_schema.columns
WHERE table_catalog = current_catalog
AND table_schema = current_schema
AND table_name = 'MyTable'
GROUP BY table_catalog, table_schema, table_name;