如何在Postgres中使用ELSIF语句

时间:2016-06-14 15:27:03

标签: postgresql if-statement

我想知道我是否可以单独运行if语句,或者它不能独立运行,必须在嵌套语句中。我无法直接运行以下代码。

IF tax_year=2005 THEN
UPDATE table1 SET column1=column1*3;
ELSIF tax_year=2006 THEN
UPDATE table1 SET column1=column1*5;
ELSIF tax_year=2007 THEN
UPDATE table1 SET column1=column1*7;
END IF;

另外,我没有写出当tax_year = 2008时,column1 = column1。我不确定它是否需要在代码中,因为第1列在2008年不会发生变化。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我使用以下代码完成了它:

-- UPDATE houston_real_acct_1single1property
-- SET convert_market_value=
-- CASE  
--         WHEN tax_year=2005 THEN total_market_value*1.21320615034169
--         WHEN tax_year=2006 THEN total_market_value*1.17961794019934
--         WHEN tax_year=2007 THEN total_market_value*1.15884093604151
--         WHEN tax_year=2008 THEN total_market_value*1.12145267335906
--         WHEN tax_year=2009 THEN total_market_value*1.11834431349904
--         WHEN tax_year=2010 THEN total_market_value*1.0971664297633
--         WHEN tax_year=2011 THEN total_market_value*1.06256515125065
--         WHEN tax_year=2012 THEN total_market_value*1.04321957955664
--         WHEN tax_year=2013 THEN total_market_value*1.02632796014915
--         WHEN tax_year=2014 THEN total_market_value*0.998472101797389
--         WHEN tax_year=2015 THEN total_market_value
-- END;

答案 1 :(得分:0)

IF / ELSIF / ELSEPL/pgsql的一部分,它是pg的扩展,默认情况下已为新数据库启用。

您可以创建一个函数来包装IF语句。并调用函数来执行这些语句。

e.g

-- create function,
CREATE OR REPLACE FUNCTION fun_dummy_tmp(id_start integer, id_end integer) RETURNS setof dummy AS $$
DECLARE
BEGIN
    IF id_start <= 0 THEN
        id_start = 1;
    END IF;

    IF id_end < id_start THEN
        id_end = id_start;
    END IF;

    return query execute 'select * from dummy where id between $1 and $2' using id_start,id_end;

    return;
END;
$$ LANGUAGE plpgsql;

-- call function,
select * from fun_dummy_tmp(1, 4);

-- drop function,
DROP FUNCTION IF EXISTS fun_dummy_tmp(integer, integer);

并且,有CASE语句,可能是您需求的更好选择。

e.g

-- create function,
CREATE OR REPLACE FUNCTION fun_dummy_tmp(id integer) RETURNS varchar AS $$
DECLARE
    msg varchar;
BEGIN
    CASE id%2
        WHEN 0 THEN
            msg := 'even';

        WHEN 1 THEN
            msg := 'odd';
        ELSE
            msg := 'impossible';
    END CASE;

    return msg;
END;
$$ LANGUAGE plpgsql;

-- call function,
select * from fun_dummy_tmp(6);

-- drop function,
DROP FUNCTION IF EXISTS fun_dummy_tmp(integer);

您可以参考postgresql document for control statement了解详情。