py lang 上的 SQL 函数,返回列

问题描述 投票:0回答:1

我需要一些帮助,我没有足够的知识。 我的问题是,如何从函数中进行选择,而无需像示例中那样编写每一列,是否有任何解决方案可以仅编写将返回所有列的短选择? 我有一个在 py lang 上编写的 SQL 函数,它返回数据(“数组”)和列数(“形状”),它可以是 2 到 10 或更多列。 为了从 func 执行数据,我使用这种类型的 select 示例:

select 
    cast(jsonb_array_elements(test_00.test_func('array')::jsonb)->>0 as text) as column1,
    cast(jsonb_array_elements(test_00.test_func('array')::jsonb)->>1 as text) as column2,
    cast(jsonb_array_elements(test_00.test_func('array')::jsonb)->>2 as text) as column3,
    cast(jsonb_array_elements(test_00.test_func('array')::jsonb)->>3 as text) as column4,
    cast(jsonb_array_elements(test_00.test_func('array')::jsonb)->>4 as text) as column5,
    cast(jsonb_array_elements(test_00.test_func('array')::jsonb)->>5 as text) as column6,
    cast(jsonb_array_elements(test_00.test_func('array')::jsonb)->>6 as text) as column7;

我虽然我的 func 返回列数,所以我可以用这种方式编写一个用于 select 的变量或其他东西,但我不知道如何实现它,希望有人能帮忙

我尝试使用生成系列进行编写,但重写了我的函数,并且我知道确切的列数,只需将其写在 select 中即可返回列数 选择 test_00.test_func('shape');

也许有帮助

WITH numbers AS (
  SELECT *
  FROM generate_series(0, (select test_00.test_func('shape')::int - 1)) as cnt
)
select 
    jsonb_array_elements(test_00.test_func('array')::jsonb) ->> cnt
from numbers;

我想做这样的事情,但是这段代码返回 1 中的每一列,我想将它分成不同的列

python postgresql function select
1个回答
0
投票

为了简化 SQL 查询并避免指定每一列,当数量变化时,您不能直接选择所有列而不列出它们。但是,您可以修改 python 函数以更易于查询的格式返回数据,或者考虑将数据输出到 SQL 中的临时表,然后从该表中选择 *。这种方法可以实现色谱柱处理的自动化。请记住,SQL 需要一个已定义的结构,因此动态选择列而不指定它们通常具有挑战性,并且可能需要像建议的解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.