2016-09-25 78 views
0

MySQL的CASE語句語法我有一個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關鍵字後表示。我結束關鍵字後,還以爲你不得不specifiy一列將出現在結果集中

Case 
When (something) 
end (return column) 

回答

2

*乘法操作

文件:MySQL Arithmetic Operators


前面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的結果。

+0

因此,在第二個CASE語句中,它檢查WHEN子句以返回0還是返回DATEDIFF的結果? –