如何在postgresql中创建函数时使用案例

时间:2017-06-29 10:02:39

标签: postgresql function case conditional-statements

我需要在我的年龄计算功能中使用条件但是如何在'比较一下这个人的年龄是否已经“转变”。或者'转身'?

这是我的功能,不计算'转向'年龄;

CREATE OR REPLACE FUNCTION agecalculator(i date) RETURNS integer AS $$
    BEGIN
            RETURN EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM i);
    END;
$$ LANGUAGE plpgsql;

这就是我想要检查Bday是否通过的原因;

CREATE OR REPLACE FUNCTION agecalculator(i date) RETURNS integer AS $$
    DECLARE age integer;
    BEGIN
            age = EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM i) - 1;
            SET age = CASE
            WHEN now_month = i_month AND now_day <= i_day
            THEN age = age + 1
            WHEN now_month < i_month
            THEN age = age + 1
            END;
            RETURN age;
    END;
$$ LANGUAGE plpgsql;

为什么SQL如此难以预料?先感谢您!

1 个答案:

答案 0 :(得分:0)

试试这个

CREATE OR REPLACE FUNCTION agecalculator(i date) RETURNS integer AS $$
    DECLARE  age integer;
            now_month integer;
            now_day integer;
            i_month integer;
            i_day integer;
    BEGIN
            now_month := date_part('month',now());
            now_day := date_part('day',now());
            i_month := date_part('month',i);
            i_day := date_part('day',i);

            age = EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM i) - 1;
            age := CASE WHEN now_month = i_month AND now_day <= i_day
                        THEN age + 1
                        WHEN now_month < i_month
                        THEN age + 1
                   END;
            RETURN age;
    END;
$$ LANGUAGE plpgsql;