案例陈述中的负/负运算符

时间:2018-12-27 23:15:44

标签: postgresql operators case

我目前正在尝试理解一些代码,对于我自己的一生,我无法弄清楚CASE语句中的负号/减号运算符在做什么。当我尝试删除它时,它破坏了可视化。

这是弄清楚查询的这一部分到底做什么的一个更大难题的一部分。我知道这是检查年份的某种计数器,如果年份是2017,则提取月份。如果不是2017年,那么它将提取从现在起12个月的月份,但是我不确定它的工作原理。在此CASE语句或此函数中对负/负运算符的任何深入了解都将不胜感激。

MAX(
CASE WHEN (- CASE WHEN EXTRACT(year FROM premium_creation_date) = 2017  --?? some sort of counter
                    THEN EXTRACT(month FROM premium_creation_date) 
                    ELSE 
                        EXTRACT(month FROM premium_creation_date) + 12 
                    END 
            + CASE WHEN EXTRACT(year FROM user_creation_date) = 2017 
                    THEN EXTRACT(month FROM user_creation_date) 
                    ELSE 
                        EXTRACT(month FROM user_creation_date) + 12 
                    END
            ) = 1
        THEN unique_user_count
        ELSE 
            NULL 
END
) AS restriction

1 个答案:

答案 0 :(得分:0)

-更改CASE结果的符号。

CASE的日期为2017年时,给出premium_creation_date的月份。否则为月份加12。

例如2017-05-04CASE中产生5,这在-生效后变为-5。对于2018-07-06,其值为7 + 12 = 19,因此为-19。

实际上,您可以将整个过程转过来,然后从第二个中减去第一个CASE。看起来可能更清楚。