【问题标题】:PostgreSQL How to use a function in select statementPostgreSQL 如何在 select 语句中使用函数
【发布时间】:2019-09-16 09:11:15
【问题描述】:

我有一个包含两列“Product_Type”和“Product_SubType”的 SQL 表。产品具有基于类型和子类型组合定义的唯一名称。但该表没有定义产品名称。当我查询表格时,我希望显示产品名称。 所以我试图创建一个包含不同类型案例的函数,并在 select 语句中输出产品名称:

create function getNameByTypes( MainType varchar, SubType varchar)
    return varchar as $$
    declare TypeName varchar;
    begin
    TypeName = case MainType
        when 'type_I' then
            case SubType
                when 'sub_type_1' then 'TypeName1'
                when 'sub_type_2' then 'TypeName2'
            end
            else 'unknown_type' end;
    return TypeName;
    end;
    $$

并使用如下功能:

select *, getNameByParams(Product_Type, Product_SubType) as TypeName
where id = 'ABC'

我收到一个错误SQL Error [42601]: ERROR: syntax error at or near "return"。我的问题是:创建函数并使用函数查询的正确方法是什么?

【问题讨论】:

  • 您从哪个表中选择?您甚至想要一个函数,还是直接将 case 语句放入您的查询中?

标签: postgresql function select


【解决方案1】:

您必须在函数定义中将return varchar 子句更改为returns varchar,并且缺少函数语言,请参见以下内容:

create function getNameByTypes( MainType varchar, SubType varchar)
returns varchar as $$
declare TypeName varchar;
begin
TypeName = case MainType
    when 'type_I' then
        case SubType
            when 'sub_type_1' then 'TypeName1'
            when 'sub_type_2' then 'TypeName2'
        end
        else 'unknown_type' end;
return TypeName;
end;
$$
language plpgsql;

并在 from 子句中与您的表一起使用:

   select *, getNameByParams(Product_Type, Product_SubType) as TypeName from your_table
 where id = 'ABC'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多