繁体   English   中英

MySQL CASE语句语法,带*运算符说明

[英]MySQL CASE statement syntax with * operator explaination

我有一个CASE语句,如下所示

        case
            when ph.term_start_date > x.year1 then 0
            DATEDIFF(case when ph.term_end_date > x.year1 then x.year1 else ph.term_end_date end, greatest(x.report_date, ph.term_start_date))
        end days_remaining_year1,
        case
            when ph.term_start_date > x.year1 then 0
            DATEDIFF(case when ph.term_end_date > x.year1 then x.year1 else ph.term_end_date end, greatest(x.report_date, ph.term_start_date))
        end *(ph.amount + ifnull(y.credit,0))/DATEDIFF(ph.term_end_date, ph.term_start_date) as deferral_year1,

我需要了解最后一行的END关键字后的*是什么意思。 我认为在end关键字之后,您必须指定将出现在结果集中的列

Case 
When ( something )
end ( return column )

*乘法运算符

Doc: MySQL算术运算符


前面的CASE返回一个值,然后乘以:

(ph.amount + ifnull(y.credit,0))/DATEDIFF(ph.term_end_date, ph.term_start_date)

其结果在deferral_year1列中返回


编辑 :回答评论

我在您的2个CASE语句上偷偷摸摸,对我来说,它们看起来不正确。 您的查询是否正确执行?

看起来在DATEDIFF之前还缺少else ,应该是此IMO

    case
        when ph.term_start_date > x.year1 then 0
        else DATEDIFF(case when ph.term_end_date > x.year1 then x.year1 else ph.term_end_date end, greatest(x.report_date, ph.term_start_date))
    end

因此,就像您说的那样,如果ph.term_start_date > x.year1它应该返回0, 否则它返回DATEDIFF的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM